nanoMuse — опенсорсный личный ИИ-агент с телефонным экраном и компьютером вместо рук

· 1 мин чтения
ai-agents open-source self-hosted gui-agent computer-use
📂 Исходный код на GitHub

Личный ИИ-агент с открытым кодом под лицензией GPL-3.0-or-later. Приложения для Android, iOS, macOS, Windows и Linux плюс веб-консоль и relay-сервер — всё в одном репозитории. Агент умеет управлять экраном телефона и компьютера, задачи выполняются в фоне, память хранится в Markdown-файлах. 137 звёзд на GitHub.

nanoMuse — опенсорсный личный ИИ-агент с телефонным экраном и компьютером вместо рук

nanoMuse — опенсорсный личный ИИ-агент, который работает на ваших собственных устройствах. Один агент с именем и внешним видом: телефонное приложение, приложение для компьютера, веб-консоль и сервер, который связывает их между собой. Всё это лежит в одном репозитории под лицензией GPL-3.0-or-later.

nanoMuse сделан по образцу персонального агента Meta Muse, но с открытым кодом. Главное отличие — агент работает не в облачной виртуальной машине, а на вашем телефоне или компьютере. Он продолжает дело, когда приложение закрыто, помнит вас и спрашивает перед всем, что нельзя отменить.

Проект некоммерческий. На момент публикации — версия 0.1.40 «Clear», 137 звёзд на GitHub, научная работа лежит на arXiv.

Что умеет

Агент не отвечает на вопросы, а выполняет задачи. Вот что он умеет.

Делает, а не советует. У него есть Linux-оболочка, браузер, MCP-серверы и скиллы. Если включить режим «руки», агент получает ещё и экраны: он может смотреть на экран телефона и нажимать в приложениях, а на компьютере — двигать мышь и нажимать клавиши. Это нужно для приложений, у которых нет API.

Спрашивает перед важным. Перед удалением, отправкой сообщения и платежом агент останавливается и показывает карточку. Разрешение можно дать один раз, на текущий чат или навсегда. Пароли, коды из СМС и капчи агент не вводит — эти экраны отдаются вам. Вы вводите код и нажимаете «Готово», агент продолжает.

Достаёт до других ваших устройств. Сказали на телефоне — задача выполняется на компьютере. В начале сообщения можно написать @Mac, и работа уйдёт туда. Подтверждения приходят на то устройство, которое вы держите в руках.

Продолжает сам. Есть цели с расписанием, регулярные дела, которые идут при закрытом приложении, и утренняя сводка, которую агент пишет для вас.

Помнит вас. Как агент выглядит, что он о вас знает и в какое время просыпается — всё это обычные Markdown-файлы. Их можно прочитать и поправить руками.

Живёт в чатах. Агент отвечает в Feishu, DingTalk, WeCom и Telegram.

Имеет свой облик. Опишите внешний вид — модель картинок нарисует её, модель видео покажет, как она двигается. По умолчанию это маленький дракон.

Работает с любой моделью. Можно пользоваться бесплатным лимитом на общественном сервере. Можно взять свой ключ у одного из восемнадцати провайдеров: Alibaba Cloud Bailian, OpenRouter, OpenAI, Gemini, DeepSeek и другие. А можно войти под уже оплаченной подпиской — ChatGPT, Claude, Kimi. Если у выбранного провайдера нет моделей для картинок и видео, эти две функции просто отключаются, и приложение об этом скажет.

Как это устроено

На каждом устройстве живёт свой агент.

  • На телефоне агент работает внутри приложения: Alpine Linux под proot, оболочка, браузер, MCP. Это песочница, собранная внутри приватного хранилища приложения.
  • На компьютере агент — это плагин к DeepSeek Harness с Python-окружением для работы с экраном.
  • В браузере — веб-консоль. Своих рук у неё нет: это входная дверь, через которую управляют остальными устройствами.

Когда вы вошли в один аккаунт, устройства находят друг друга через relay — сервер, который пересылает между ними сообщения. Технически это один исходящий WebSocket с каждого устройства, который держится постоянно. Пробрасывать порты и поднимать общую сеть не нужно. Сервер перекладывает сообщения между устройствами одного аккаунта и не заглядывает внутрь задач. Текст разговоров через него проходит, а файлы и скриншоты остаются там, где были сделаны.

Подробнее про устройства — в docs/every-device.md, про сам сервер — в docs/hub.md.

Экран как рука

Работа с экраном обходится дороже всего, поэтому агент идёт к ней последней. В проекте это называется лестницей: четыре ступени, которые пробуются сверху вниз.

Ступень Как Когда
1 Скилл, CLI-утилита или MCP-сервер когда такое есть: точно и мгновенно, экран не нужен
2 Загрузка страницы под вашим логином когда ответ виден после входа в аккаунт
3 Встроенный браузер, страница за страницей когда нужно прокликать сайт
4 Экран устройства когда задача живёт только в приложении

Скилл сам объявляет в описании, на какой ступени работает: api, cli, web, browser, gui или mixed. Скилл для экрана помечается в списке агента как «на экране телефона», и агент сразу понимает, что задача экранная. Если вы сами не просили трогать телефон, агент спросит перед тем, как подняться на верхнюю ступень.

Смотреть на экран и нажимать умеет отдельный внутренний цикл. Он получает картинку, выбирает одно действие и смотрит снова. Координаты модель отдаёт на сетке 999×999, а программа пересчитывает их в пиксели экрана. Для этой работы можно выбрать отдельную модель: она обязана уметь видеть изображения, а температура у неё нулевая. Движению по экрану нужен первый ответ модели, а не случайный.

Всё записанное можно посмотреть. Каждая задача пишет JSONL-трассу: цель, шаги, скриншоты, модельные рассуждения. Команда nanomuse phone trace <id> -o trace.html собирает из неё одну HTML-страницу, где каждый тап нарисован поверх того экрана, который видела модель. Такую страницу можно приложить к issue.

Подробности — в docs/gui.md.

Sentinel: кто разрешает опасное

Агент не выполняет инструменты сам. Каждый вызов сначала проходит через Sentinel — отдельный слой, который решает, можно ли выполнять.

У каждого инструмента есть свой уровень риска:

Уровень Что значит Примеры
safe обратимо и локально чтение файлов в рабочей папке, веб-поиск, память
moderate выходит наружу или меняет состояние загрузка страницы, выполнение Python, чтение почты
sensitive трудно отменить или видно другим shell, отправка почты, сохранение скилла

Решение принимается по порядку: запрет инструмента, потом правила из конфига, потом списки «всегда разрешено» и «всегда спросить», потом проверка на утечку данных, и в конце — уровень риска вместе с режимом. Режимов три: ask (по умолчанию), strict и auto. Предупреждения — например, на rm -rf, sudo или curl | sh — не пропускаются ни режимом, ни списком разрешений. Их можно пропустить только явным правилом.

Отдельная механика — пометка сессии. Как только агент прочитал частные данные (например, сделал скриншот экрана), сессия помечается, и всё, что дальше уходит наружу, проверяется строже. На экране телефона опасным считается не сама команда, а подпись под пальцем: если в словах агента есть «подтвердить оплату», «перевести», «отправить», «удалить», система спрашивает. При этом одно разрешение на отправку не превращается в разрешение на следующую.

Пароли, коды и подтверждения платежа вводит человек. Агент умеет передать экран вам: в чате появляется карточка «Ваш ход», вы вводите данные и жмёте «Готово», агент делает новый скриншот и продолжает с чистого листа. Если в фокусе оказалось поле пароля, передача происходит сама.

Про песочницу и правила целиком — в docs/sentinel.md.

Память и своё железо

Память агента — это Markdown-файлы, которые можно открыть и отредактировать. Цели и расписания тоже свои, без внешней базы.

Запустить всё у себя можно тремя способами.

  1. Без сервера, со своим ключом. Приложения ходят к провайдеру напрямую. Relay нужен только для входа и для того, чтобы устройства находили друг друга. Ничего ставить и поддерживать не нужно. Список провайдеров и что покрывает каждый ключ — в docs/own-key.md.
  2. Свой relay. Это один Python-сервис и один файл SQLite с базой. Нужен VPS с 1 vCPU и 1 ГБ памяти, домен с открытыми 80 и 443 и Docker. Всё поднимается одной командой:
git clone https://github.com/nano-muse/nanoMuse.git && cd nanoMuse
bash scripts/self-host.sh

Скрипт спрашивает пять вещей, придумывает секреты, запускает Docker Compose, ждёт готовности и печатает адреса. Без домена и TLS: bash scripts/self-host.sh --local.

  1. Своё окружение для веб-приложения. Python-рантайм в Docker на машине, которая всегда включена.

Инструкция целиком — в docs/self-hosting.md.

Свои агенты для написания кода

Отдельная интересная возможность: агент видит сессии Cursor, Codex и Claude Code на вашем компьютере и может ими управлять. Он читает их логи с диска, запускает их собственные командные интерфейсы для нового сообщения и показывает, что они делают. Ничего в эти агенты не ставится, и их работа не идёт через чужой сервер.

Это удобно тем, что с телефона можно посмотреть, над чем вы работали, остановить зависший запуск или попросить Codex дописать тест в нужном репозитории. Запрос идёт только между устройствами одного аккаунта, а компьютер может вообще запретить удалённое управление. Ключи API этих агентов nanoMuse никогда не видит. Подробности — в docs/coding-agents.md.

Установка

Готовые сборки лежат в релизах.

Платформа Что качать
Браузер demo.nanomuse.dev — демонстрация на виртуальном телефоне после входа
Android 8.0+ APK для arm64, каждая версия подписана тем же ключом и ставится поверх предыдущей
iPhone и iPad TestFlight: бета-сборка, она станет доступна после проверки в Apple
macOS 12+ DMG для Apple Silicon и Intel, нотариализации нет — при первом запуске правый клик и «Открыть»
Windows 10+ EXE, при первом запуске «Выполнить в любом случае»
Linux x64 AppImage, .deb или tar.gz
Свой сервер bash scripts/self-host.sh --local для relay, docker compose up -d app для веб-приложения

После установки вход по e-mail или по китайскому номеру телефона — и у агента сразу есть модель для размышлений. Телефон, компьютер и браузер работают под одним аккаунтом и показывают одни и те же разговоры.

На чём построено

  • OpenMinis — агент, на котором построено телефонное приложение, вместе с proot и Alpine Linux для песочницы.
  • DeepSeek Harness — каркас агента, плагином которого является приложение для компьютера.
  • UI-TARS-desktop от ByteDance — оператор для рук на компьютере, порт их кода.

Своё лицо у nanoMuse одно: маленький дракон. Проект не связан с Meta и не одобрен ими, слово Muse — их товарный знак.

Как добавить свой инструмент и где в дереве репозитория что лежит — в docs/architecture.md. Правила для кодовых агентов, работающих в этом репозитории, — в CONTRIBUTING.md.

Источник: https://github.com/nano-muse/nanoMuse