Агентная обёртка для нейросетей на Android: разработка приложений прямо с телефона.
Чат с LLM через API, каталог моделей, история чатов, своя папка агента (skills, MCP, системный промт),
скоупы доступа к файлам и OTA-обновления через GitHub Releases — всё в строгой стилистике Metro.
- 💬 Чат с нейросетями — OpenAI-совместимые провайдеры: OpenRouter, OpenCode Zen, любой custom endpoint или локальная Ollama. Стриминг ответов в реальном времени.
- 🗂 Каталог моделей — скан
GET /modelsс поиском и выбором в один тап, без ручного ввода id. - 🧠 Effort (reasoning) — уровни
low/medium/highдля поддерживающих моделей (OpenRouter). - 📝 История чатов — сессии с автозаголовками, новый чат, удаление; всё локально на телефоне.
- 🤖 Папка агента (
filesDir/merta/):system.md(системный промт),skills/(SKILL.md),mcp.json,chats/,workspace/. - 📁 Скоупы файлов — разрешённые/запрещённые папки (
.git/,*.keystore,*.envпо умолчанию), SAF-подключение внешних папок. Агент не видит лишнего. - 🚀 OTA-обновления — проверка релизов, автосканирование по расписанию с уведомлениями, скачивание и установка APK внутри приложения. Та же система, что в metro-launcher.
- 🪟 Стиль Metro — акцент из обоев, стекло, Segoe UI Variable, тактильный отклик (порт дизайн-системы metro-launcher).
Дальше по плану: инструменты агента (файлы/терминал с approve), мост к Antigravity CLI в Termux/proot, операции через Shizuku (установка APK, логи).
- JDK 21
- Android SDK 35 (minSdk 26 — Android 8.0+)
- Gradle через wrapper (
./gradlew, качать ничего не надо)
./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkDebug-пакет: dev.merta.app.debug (суффикс .debug, не путать с релизом).
Подпись release-ключами из local.properties:
merta.storeFile=/home/<user>/.config/merta/merta-release.keystore
merta.storePassword=...
merta.keyAlias=merta
merta.keyPassword=..../gradlew :app:assembleRelease -x test
# APK: app/build/outputs/apk/release/app-release.apk (пакет dev.merta.app)Токен: ~/.config/merta/github_token (права 600).
# 1. Поднять versionCode (+1) и versionName в app/build.gradle.kts, закоммитить, запушить в main
# 2. Опубликовать:
./tools/release.sh v0.2.0 "Что нового"Скрипт соберёт подписанный APK, создаст тег, GitHub Release и зальёт APK в ассеты — телефоны подтянут обновление по воздуху. Без инкремента versionCode встроенный апдейтер обновление не предложит!
app/src/main/java/dev/merta/app/
├── MertaActivity.kt # маршруты: CHAT / SETTINGS / MODELS / SESSIONS
├── ui/theme/ # Metro: схема, шрифты, кривые, metroClickable
├── ui/chat/ # лента + ChatViewModel (стрим, сессии)
├── ui/settings/ # параметры + секция OTA-обновлений
├── ui/models/ # каталог моделей провайдера
├── ui/sessions/ # список чатов
├── data/llm/ # OpenAI-совместимый клиент (SSE), парсеры
├── data/settings/ # конфиг (ключ — только в EncryptedSharedPreferences)
├── data/agent/ # папка агента: system.md, skills, mcp.json
├── data/chat/ # история сессий
├── data/workspace/ # скоупы доступа к файлам (FileGateway)
├── data/update/ # OTA: проверка, скачивание, автосканы, уведомления
├── bridge/ # (план) мост к Antigravity CLI
└── adb/ # (план) операции через Shizuku
Внутренние заметки для агентов — AGENTS.md (не коммитится).
Проект распространяется под лицензией GNU General Public License v3.0.