mobile-use — агент, который управляет телефоном на естественном языке
📂 Исходный код на GitHubОткрытый AI-агент, который управляет устройством на Android или iOS командами на естественном языке. Понимает интерфейс приложений, извлекает данные из любого приложения и отдаёт их в нужном формате, например в JSON. Модель выбирается на ваш вкус: OpenAI, Google, xAI, OpenRouter, Anthropic, MiniMax или локальная. Первый агентный фреймворк с результатом 100% на бенчмарке AndroidWorld. Apache-2.0.
mobile-use — это открытый AI-агент, который управляет смартфоном на естественном языке. Вы пишете обычную фразу вроде «открой Gmail, найди три непрочитанных письма и покажи отправителей», а агент сам смотрит на экран, нажимает кнопки и приносит результат. Проект написан на Python, распространяется под лицензией Apache 2.0, и на момент публикации набирает больше трёх тысяч звёзд на GitHub.
Главная идея простая: у телефонов нет API, через который можно было бы выполнить обычную команду агента. Приложение закрывает свой интерфейс от внешнего мира. mobile-use решает эту задачу так же, как это сделал бы человек: смотрит на экран, принимает решение и нажимает. Никаких специальных интеграций с каждым приложением не нужно.
Что умеет
| Возможность | Что это значит |
|---|---|
| Управление на естественном языке | Телефон слушается обычных фраз, а не команд в специальном формате |
| Работа с интерфейсом приложений | Агент ориентируется по тому, что реально нарисовано на экране |
| Сбор данных | Данные из любого приложения приходят в нужном виде, например в JSON |
| Смена модели | Поддерживаются OpenAI, Google, xAI, OpenRouter, Anthropic, MiniMax и другие |
Отдельно авторы проекта предупреждают: с играми агент работает плохо. Игры не отдают дерево доступности, поэтому агенту просто не из чего понять, что происходит на экране. Это ограничение касается именно игр, обычные приложения с настройками доступности работают нормально.
Бенчмарк AndroidWorld и научная работа
Проект заявляет, что стал первым агентным фреймворком с результатом 100% на бенчмарке AndroidWorld. Это набор задач, где агент должен сам пройти сценарии в приложениях Android: настройки, почта, записи в календаре. Подробности есть на странице проекта — https://minitap.ai/benchmark. Официальная таблица с результатами лежит в Google Sheets.
Команда также выпустила научную работу: «Do Multi-Agents Dream of Electric Screens? Achieving Perfect Accuracy on AndroidWorld Through Task Decomposition». Она описывает, как была получена такая точность. Основной приём в ней — разбиение задачи на части, то есть декомпозиция: вместо одного агента, который делает всё сразу, работает несколько, и каждый отвечает за свой кусок. Работа доступна на arXiv — https://arxiv.org/abs/2602.07787.
Если вы используете проект в исследованиих или в коммерческом продукте, авторы просят сослаться на эту работу и указать компанию Minitap.
Какие устройства поддерживаются
Здесь важно сразу обозначить границы, чтобы не тратить время:
- Настоящие телефоны на Android — подключаются по USB, в настройках разработчика включается отладка по USB.
- Эмуляторы Android — настраиваются через Android Studio.
- Эмуляторы iOS — работают только на macOS.
- Настоящие iPhone — пока не поддерживаются.
Последний пункт — это ограничение самого проекта, а не вашей настройки. Поддержка физических iOS-устройств в README не заявлена.
Быстрый старт через Docker
Это самый короткий путь, но только для Android. Нужен установленный Docker, устройство подключено по USB с включённой отладкой либо запущен эмулятор.
На Linux и macOS:
chmod +x mobile-use.sh
bash ./mobile-use.sh \
"Open Gmail, find first 3 unread emails, and list their sender and subject line" \
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
На Windows скрипт запускается через PowerShell:
powershell.exe -ExecutionPolicy Bypass -File mobile-use.ps1 `
"Open Gmail, find first 3 unread emails, and list their sender and subject line" `
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
Флаг --output-description — самое интересное здесь. Вы описываете словами, в каком виде хотите получить данные, и агент собирает результат именно в этом виде. Не нужно писать схему или код разбора.
Если телефон подключён физически, на экране появятся запросы на соединение по ADB — их нужно подтвердить.
Установка вручную
Если вы хотите разбираться в коде или доработать проект, окружение ставится вручную. Менеджер пакетов здесь uv — он же создаёт виртуальное окружение.
Сначала клонируем репозиторий и заводим ключи в .env:
git clone https://github.com/minitap-ai/mobile-use.git && cd mobile-use
cp .env.example .env
Дальше создаём виртуальное окружение и ставим зависимости. Файл .python-version указывает версию Python, поэтому uv подберёт её сам:
# create the virtual environment and activate it
uv venv
# install dependencies with locked versions
uv sync
Активация окружения зависит от системы:
# macOS and Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
Для iOS понадобится ещё Xcode и fb-idb от Facebook — это мост для работы с симуляторами iOS. Ставится через Homebrew:
# Install via Homebrew (macOS)
brew tap facebook/fb
brew install idb-companion
После установки должен быть доступен idb_companion, и его путь должен попадать в PATH.
Как запустить задачу
Работает агент так же просто, как любая консольная программа: команда передаётся аргументом.
Простая задача:
python ./minitap/mobile_use/main.py "Go to settings and tell me my current battery level"
Сбор данных с разбором в JSON:
python ./minitap/mobile_use/main.py \
"Open Gmail, find all unread emails, and list their sender and subject line" \
--output-description "A JSON list of objects, each with 'sender' and 'subject' keys"
Если модель в конфиге не задана, агент спросит, какую выбрать, из списка доступных.
Выбор модели
По умолчанию берутся настройки из файла llm-config.defaults.jsonc. Свой вариант удобно положить рядом — скопируйте шаблон и правьте его:
cp llm-config.override.template.jsonc llm-config.override.jsonc
Что важно знать про провайдеров:
| Провайдер | Что нужно | Модели из README |
|---|---|---|
| OpenAI | Ключ в .env |
Указывается в конфиге |
| Anthropic | ANTHROPIC_API_KEY |
claude-sonnet-4-6 (200K контекста), claude-haiku-4-5-20251001 |
| MiniMax | MINIMAX_API_KEY |
MiniMax-M2.7 (200K), MiniMax-M2.7-highspeed |
| Google Vertex AI | Файл ключа сервисного аккаунта | Указывается в конфиге |
Ключ для Anthropic выглядит так: переменная ANTHROPIC_API_KEY в файле .env, а сам пресет anthropic копируется из файла с настройками по умолчанию в ваш файл переопределения. Тот же принцип у MiniMax — только с ключом MINIMAX_API_KEY.
Отдельно поддерживаются локальные модели и любой сервис, который говорит по протоколу OpenAI. Для этого достаточно указать OPENAI_BASE_URL и OPENAI_API_KEY в .env, а в настройках выбрать провайдера openai для нужных узлов агента.
Для Google Vertex AI есть условие: либо у окружения уже настроены нужные права (например, gcloud, workload identity), либо путь к файлу сервисного аккаунта нужно положить в переменную GOOGLE_APPLICATION_CREDENTIALS.
Если что-то не работает
Скрипт подключается к устройству по IP, поэтому телефон и компьютер должны быть в одной сети Wi-Fi. Отсюда типичные ошибки:
Could not get device IP — скрипт не нашёл ни один из обычных интерфейсов Wi-Fi на устройстве. Посмотрите, какой интерфейс использует телефон, командой adb shell ip addr show up, и передайте скрипту ключ --interface с его именем.
Failed to connect to <DEVICE_IP>:5555 inside Docker — почти всегда закрывает файрвол. Простого решения нет: нужно открыть доступ на нужный порт.
Не удаётся скачать образы из ghcr.io — у вас истёкший токен от прошлых экспериментов с приватными репозиториями. Помогает команда docker logout ghcr.io, после неё скрипт запускают заново.
Лицензия и вклад в проект
Проект распространяется под лицензией Apache 2.0, текст лежит в файле LICENSE. В README отдельно просят указывать компанию Minitap, Inc., если вы используете код или вдохновляетесь архитектурой проекта.
Сам проект авторы называют быстро меняющимся и прямо просят присылать идеи и сообщения о багах. Правила оформления вклада описаны в CONTRIBUTING.md. Есть и обсуждения в Discord — https://discord.gg/6nSqmQ9pQs.
Документация по SDK лежит отдельно: https://docs.minitap.ai/mobile-use-sdk/quickstart. Пакет также опубликован на PyPI под именем minitap-mobile-use.
Источник: https://github.com/minitap-ai/mobile-use