Экосистема Евы 🩷
Обзор проектов вокруг Евы. В центре — ядро (рантайм, где Ева живёт); вокруг
него клиенты (интерфейсы к одному и тому же ядру), модули (новые руки и
поверхности) и MCP-серверы (инструменты). Всё — под git.desu.church, org
eva (кроме отмеченного).
Ключевая идея: ум и состояние — в ядре, клиенты тонкие. Чаты, память, навыки,
личности общие — один и тот же чат виден из любого клиента; folder —
человеческая полка «о чём чат», перекладывается откуда угодно, а чаты
специализированных поверхностей (telegram, mtl) помечены surface и в общий
список не лезут. Переключение модели, история — всё через HTTP/SSE-API ядра.
Ядро
eva-kernel (eva/kernel) — провайдеро-независимое LLM-ядро на Rust:
долговременная память, инструменты, навыки, чаты с гигиеной контекста, крон —
в одном бинаре поверх одного SQLite-файла. Полное описание, конфиг и API — в
README.md.
Каналы связи ядру не принадлежат: телеграм и всё, что появится дальше, живёт модулями рядом.
Клиенты
| Клиент | Репозиторий | Стек | Что умеет |
|---|---|---|---|
| web | eva/frontend | Nuxt 4 + Tailwind | Ева в браузере; ставить нечего, наружу вешается под замком с паролем |
| app | eva/app | Tauri + Nuxt | Десктопное окно с руками: клиентские операции, разрешения, кодовые сессии |
| android | eva/android | Kotlin + Jetpack Compose | Полноценный мобильный клиент |
| tui | eva/tui | Python + Textual + httpx | Терминальный клиент; руки и код-режим есть и здесь |
| mtl | eva/mtl | Tauri + Nuxt | Мастерская переводного патча: движки игр, ресурсы, обратная запись |
| telegram | eva/telegram-bridge | Rust + eva-sdk | Не клиент, а поверхность: отдельный процесс-модуль, ведёт телеграм целиком |
Файлы и команды на машине Господина исполняет сам клиент: ядро шлёт
событие client_op в живой стрим тура, клиент делает это у себя и постит
результат обратно. Поэтому руки есть у десктопа, терминала и мастерской, а у
вкладки браузера — нет.
web
Ева в браузере: лента со стримингом и картинками, инструменты живьём, кнопочные вопросы, память, крон, подагенты, генерации, очередь одобрений, расход, личности, несколько ядер на выбор. Замок паролем стоит на самом раннем хуке, поэтому наружу не уходит ничего, кроме формы входа. В ядро браузер ходит напрямую — CORS вешается на reverse-proxy перед ним.
app
То же окно на рабочем столе (Tauri), но с руками: клиентские операции с
вопросом на запись и команду (дифф против диска, каталог команды, «всегда» на
сессию), кодовые сессии на полке code с привязкой к проекту (поле
project чата) и памятью проекта в .eva/,
компаньон-кружок поверх всех окон со снимком экрана.
mtl
Мастерская переводного патча: открываешь каталог игры — она опознаёт движок,
разбирает реплики со сценой и говорящим, переводит и кладёт назад так, как
ждёт движок (копия файла снимается до первой правки). Двенадцать опознаваемых
движков, разбор и обратная запись — RPG Maker MV/MZ, чтение — Ren’Py.
Глоссарий и стиль лежат в .mtl рядом с игрой и едут в контекст каждого тура.
android
Основной клиент. Чаты по папкам, выбор модели (per-чат + клиентский дефолт
новых чатов), стриминг с тул-коллами как в Claude (свёрнутый чип с иконкой,
группировка подряд идущих шагов, разворот в лист «Сводка» с таймлайном; известные
тулы — с человеческой сводкой, mcp_* — сыро). Просмотр памяти, крона,
генераций (обзор/отмена туров), статистики расхода/триажа, мульти-сервер.
Доверенный клиент: туры уходят trusted + uncapped.
Отдельно — вкладка YouTube (PipePipeExtractor): смотреть ролики/плейлисты,
спросить Еву о содержимом (субтитры → транскрипт → чат в папке youtube),
скачивать, фоновое проигрывание, кэш и оффлайн. Это GUI/мобильная фича, в
терминал не переносится.
tui
Ева в терминале — Textual + httpx, тонкий клиент. Общие чаты со всеми клиентами, создание/удаление/обновление на клавишах, переключение полок и поверхностей, стриминг дельтами с пометками вызовов инструментов. Приводится к паритету с андроидом по терминало-уместным фичам (выбор модели, разворачиваемые тул-коллы, память/крон/статы/генерации).
Модули и SDK
Модуль — отдельный процесс: даёт Еве инструменты (MCP-сервер, к которому подключается ядро) и, если он поверхность, ведёт туры через API ядра. Протокол и границы — глава «Модули и SDK».
| Проект | Репозиторий | Что это |
|---|---|---|
| eva-sdk (Rust) | eva/kernel, sdk/ | Клиент ядра + MCP-сервер модуля + стадии middleware |
| eva-sdk (Python) | eva/sdk-py | То же самое на Python; им же пишутся middleware-записи |
| telegram-bridge | eva/telegram-bridge | Телеграмная поверхность: поллинг, триаж, доставка, инструменты telegram_* |
| eva-books | eva/kernel, plugins/books/ | Книжная полка: PDF/EPUB/FB2/TXT постранично и поиск по словам — с полки сервера или с машины клиента |
MCP-серверы
Инструменты, которые ядро подключает как клиент. Каталог наших серверов (поездки по РЖД, VNDB, крипто-свопы, Forgejo, имиджборд-платформа и др.) — в MCP-SERVERS.md.
Картина
web ──────┐ ┌── telegram-bridge (модуль)
app ──────┤ │
android ──┼──▶ eva-kernel ◀────────┤
tui ──────┤ (HTTP/SSE) └── следующая поверхность
mtl ──────┘ │
│ MCP (stdio / HTTP / UDS)
┌──────────┼──────────────┐
rzd kana redose viendesu ghostswap forgejo …
Клиенты и модули цепляются к одному API: клиент показывает Еву человеку, модуль даёт ей руки или целый канал связи.