English · Русский
Iva - self-hosted AI-ассистент в Telegram с многослойной памятью, который превращает ваши сообщения в vault, совместимый с Obsidian. Вы говорите - она раскладывает: голосовые, фото, пересланные посты и решения становятся обычными markdown-карточками, которые она действительно помнит. Всё крутится на вашем собственном сервере, с вашими ключами и вашими данными. Ставится одной командой:
curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/install.sh | bash- «Что мы решили с клиентом Х по прошлой отгрузке?» - нашла за секунды, спустя месяцы.
- Голосовое на пять минут из машины → список задач, черновик письма, карточка встречи.
- «Сделай КП по этому прайсу, скидку на 2,5 % меньше, вышли клиенту» - готовый Google-док, ссылка в чате.
Остальное - для предпринимателей, специалистов, руководителей и просто жизни: Юзкейсы.
Мост опрашивает Telegram через long-poll, так что публичный HTTPS, домен и webhook не нужны. Ива работает как два systemd user service, два systemd watchdog-таймера и пять внутрипроцессных eve schedules - эксплуатация описана в docs/deploy.md.
Зачем вам это → 25+ живых сценариев - бизнес, работа, жизнь.
Голос, зрение, память, личный CRM, Google Workspace, скиллы - развернуть полный список
- Голос - голосовые, аудио и видеосообщения расшифровывает Deepgram nova-3; язык (ru/uz/en) определяет сама.
- Зрение - фото описывает vision-модель вашего же провайдера; ни лишнего ключа, ни лишнего счёта.
- Живые ответы - таблицы, чек-листы, сворачиваемые блоки и формулы рендерятся прямо в Telegram (rich messages Bot API 10.1); обычное форматирование идёт проверенным путём, с мягким откатом при сбое.
- Тихая проверка обновлений - раз в день Ива без расхода токенов проверяет стабильные релизы. Есть новая версия - Telegram один раз предложит «Обновить» или «Позже»; нет - промолчит.
- Многослойная память - помнит месяцами, даже когда окно чата давно уехало.
- Личный CRM - кто ваши люди, о чём договорились, когда напомнить.
- Поиск по смыслу - BM25 плюс переранжировка по графу связей, на любом языке; опциональный векторный режим одним ключом.
- Карточки решений - что выбрали, когда и почему; старые версии остаются в датированной истории.
- Задачи и напоминания - приоритеты, сроки и утренний дайджест.
- Поиск в интернете - четыре провайдера на выбор: Tavily, Exa, Parallel или Brave.
- Google Workspace - Gmail, Календарь, Drive, Таблицы, Документы и Задачи прямо из чата через CLI
gws; ставится сам, а подключение ключа проходите по шагам прямо в переписке. - Скиллы и MCP - один файл, чтобы добавить процедуру или подключить MCP-сервер; ключи остаются в
.env. - Личный Telegram - userbot (бета) - читать и отправлять от вашего собственного аккаунта, а не только от бота; подключение прямо в чате (QR, без терминала). Сырой и капризный - включается вручную, на ваш страх и риск. Серверный анти-бан (FloodWait, случайные паузы, circuit-breaker) вшит в код, а не просто рекомендован. Подробности.
- Можно пересылать чужое - текст пересылок, подписи и расшифровки голосовых проходят проверку на инъекции до того, как их прочитает модель. Помеченное сообщение или расшифровка доходят до модели с меткой «это данные, не команда»; для подписей к медиа проверка работает, но метка до модели пока не доезжает.
- Учёт токенов - каждый шаг модели логируется;
/usageбесплатно показывает расход.
| Слой | Что там живёт | Путь |
|---|---|---|
| 🍃 Листья | дословный транскрипт каждого дня, вместе с ответами Iva | daily/YYYY-MM-DD.md |
| 🌿 Ветви | сводки, свёрнутые вверх: день → неделя → месяц → год | summaries/daily/, weekly/, monthly/, yearly/ |
| 🪵 Ствол | CORE.md (≤1200 символов, в каждом промпте) + типизированные карточки: контакты, проекты, решения, идеи, заметки |
CORE.md, cards/ |
- Каждое сообщение падает в дневной markdown-лог дословно - на входе ничего не пересказывается.
- Ночная сборка в 04:00 сворачивает день → неделю → месяц → год в карточки, проверенные по схеме; изменившиеся факты переписываются, а не копятся.
- Один core-файл,
CORE.md(≤1200 символов), едет в каждом промпте - Ива знает вас ещё до всякого поиска.
Полная архитектура и устройство поиска: docs/ru/memory.md.
Бот - половина Telegram. Вторая половина - ваш личный аккаунт: подключите userbot (бета, по желанию), и Iva станет работать из него как секретарь. Читает групповые чаты, до которых у вас не доходят руки, собирает их в сводки, ловит сообщения, где нужны именно вы, и отвечает от вашего имени.
- Телеграм целиком - группы, каналы, непрочитанное, поиск и вся история личного аккаунта.
- Подключение в чате - пишете боту «подключи мой телеграм», сканируете QR. Терминал не нужен.
- Анти-бан гардрейл на сервере - пауза по FloodWait, случайная задержка после каждой отправки, автостоп после трёх FloodWait за 24 часа. Он живёт в прокси, а не в промпте, и накрывает три исходящих вызова, из-за которых аккаунты и режут: сообщения, файлы, пересылки. Вступления, инвайты, импорт контактов и реакции не обёрнуты - эти ограничения держит файл скилла, то есть промпт.
- Режим «только чтение» - один переключатель в
.env, и Iva читает и ищет, но отправлять не может физически.
Warning
Автоматизация личного аккаунта нарушает правила Telegram, аккаунт могут ограничить или забанить. Юзербот - бета, включается вручную и на ваш собственный риск; чтение заметно безопаснее отправки. Подробности: docs/userbot.md.
Веб-страницы, выдача поиска, расшифровки голосовых, подписи и описание присланной картинки доходят до модели только через санитайзер prompt-инъекций. На пересланном текстовом сообщении тот же гейт добавляет к ходу предупреждение, а не фильтрует текст; тела документов, чаты, прочитанные userbot-ом, и вывод agent-browser не проверяются вовсе. Всё, что уходит через Outbox, проходит гейт вычистки секретов, а allowlist пользователей закрыт по умолчанию: пустой список не отвечает никому. Ваша память - приватный git-репозиторий, который принадлежит вам; честная граница в том, что модель и расшифровка - облачные API, которые вы сами выбираете и оплачиваете. Устройство гейтов и полная граница: docs/ru/security.md.
Одна команда на любой машине с Ubuntu/Debian - свежем VPS или собственном компьютере:
curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/install.sh | bash- Возьмите токен бота у @BotFather.
- Запустите установщик и ответьте на его вопросы.
- Напишите своему боту. Мастер достанет ваш Telegram ID из этого сообщения, закончит настройку, и Ива прямо в чате подтвердит, что работает.
Ставьте от обычного пользователя, не от root: shell-инструмент Ивы работает с правами того, кто её поставил. Для установки без диалога есть --skip-setup и --non-interactive. Хотите сначала прочитать скрипт - заберите его через curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/install.sh -o install.sh, прочитайте, потом bash install.sh. Прохождение мастера шаг за шагом и SSH-ликбез для тех, у кого VPS впервые: docs/ru/install.md.
Только что купили VPS и сидите под root? Этот скрипт готовит машину до установки Ивы: заводит sudo-пользователя (сразу с linger), обновляет систему и ставит зависимости. Заодно включает фаервол (наружу открыт только SSH), fail2ban и автоматические обновления безопасности, а вход под root по SSH закрывает.
bash <(curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/bootstrap.sh)Спросит три вещи - логин, пароль и часовой пояс, - SSH-ключ не нужен. Если обновилось ядро, предложит перезагрузку. Повторный запуск безопасен: уже настроенное скрипт не ломает.
Дальше переподключитесь созданным пользователем с тем же паролем и запустите команду установки из начала раздела.
Три сообщения, чтобы увидеть память в работе:
- Наговорите голосовое про свой день - что угодно, вслух. Потом загляните в папку
daily/внутри вашего vault на сервере: ваши слова лежат там обычным markdown, с датой, и они ваши. Больше ни один ассистент не отдаёт вам файл. - Скажите то, что запомнил бы коллега:
Марина из Acme ждёт пересчитанное КП к пятнице, по телефону не отвечает никогда. - Спросите обратно по-человечески:
как мне дожать Марину?- ответ придёт из карточки, которую Ива только что завела, а не из последних сообщений.
Дальше пришлите фото визитки или перешлите длинный пост и попросите суть. Остальное - в /menu, полный список - в 25+ сценариях.
Установка из исходников - собрать из клона самому
git clone https://github.com/smixs/iva-agent.git ~/iva
cd ~/iva && bash install.shУстановщик переиспользует существующий чекаут вместо повторного клонирования, не трогает .env и vault и ставит те же зависимости. Форк или ветка задаются переменными, которые скрипт читает на старте: REPO_URL=…, BRANCH=…, INSTALL_DIR=… (по умолчанию: этот репозиторий, main, ~/iva). Подробности: docs/ru/install.md.
Четыре провайдера модели. Выбираете одного и заполняете его блок в .env:
| Провайдер | Как платите |
|---|---|
| OpenCode Go | API-ключ, ~$10/мес ($5 первый месяц) |
| Ollama Cloud | API-ключ, ~$20/мес |
| OpenRouter | API-ключ, оплата по факту, 300+ моделей |
| OpenAI (ChatGPT) | ваша подписка Plus/Pro, ключ не нужен |
Модель по умолчанию deepseek-v4-pro, контекст 131k. На Go выходит около $14-15/мес со всем ($10 модель плюс $4-5 VPS; первый месяц модели $5), без наценки; голос едет на бесплатном кредите Deepgram. Списки моделей, лимиты и матрица поиска: docs/providers.md.
Юзкейсы · Установка · Настройка · Память · Провайдеры EN · Безопасность · Деплой EN · Команды и CLI EN · Меню EN · Расширение EN · Плагины · FAQ · Решение проблем EN
Документация на английском → docs/
v0.3.33 · 26.08.2026 - развернуть последние релизы
- 🧾 Длинное и форматированное сообщение больше не пропадает молча: с Bot API 10.1 клиент кладёт такое сообщение в поле
rich_messageвместоtext(до 32768 символов против 4096), а Bridge принимал только знакомые ключи содержимого и остальное отбрасывал, записав в журнал один номер апдейта - короткие сообщения бот отвечал, длинные игнорировал,/restartне помогал. Теперь Bridge судит конверт: принимается любое сообщение от пользователя из Allowlist, где есть хоть один ключ вне метаданных Bot API, а что читается - решает агент, читалка rich-сообщений живёт в нём с 0.3.25, поэтому новое поле Bot API доезжает само. Если читать нечего (poll,contact, незнакомое поле), Ива один раз отвечаетНе могу прочитать это сообщение (поля: poll). Пришли текстом или файлом.вместо тишины. Строка отброса вiva logs pollназывает ключи верхнего уровня - только имена, текст сообщений в журнал по-прежнему не попадает. В группе правило прежнее: сообщение безtext/captionпринимается как reply боту. Отправка rich-сообщений (sendRichMessageчерез Outbox, с 0.3.25) не менялась. В troubleshooting новый раздел. - 📐 Правило входа записано: Bridge судит конверт, содержимое судит Inbound pipeline: ADR-0011 фиксирует границу, отвергнутые альтернативы (дописать одно поле в список ключей, завести второй нормализатор в Bridge, принимать всё и молчать) и дыру в группах, унесённую в
docs/tech-debt.md.
- 📣 Уведомление о новой версии теперь говорит, что нового: ежедневный Alert «доступна новая версия Ивы» перечисляет заголовки всех релизов между вашим и свежим, на вашем языке, новые сверху, со ссылкой на полный список. Источник - секция What's New README на предлагаемом коммите: второй changelog не заводится; README, который не распарсился, стоит блока, но не уведомления. Каждый пункт этой секции теперь открывается эмодзи и жирным заголовком - именно его показывает уведомление.
- 🔁 Reply на старое сообщение бота больше не вешает бота: сессии закрываются постоянно (ночной сброс, ротация,
/new, рестарт при обновлении), а ответ-цитата на сообщение закрытой сессии маршрутизировался как её продолжение. Доставка падала сtarget session was not found via continuation token, элемент оставался в inbox-очереди, и поллер повторял его каждый цикл - сотни ошибок, бот не отвечал никому (#203). Теперь такой reply доставляется один раз обычным новым сообщением (цитата теряет старый контекст, пользователь получает ответ), а этот класс ошибки больше не может удержать элемент в очереди. Транзиентный сбой - рестарт eve, таймаут - ретраится как раньше, сообщение не теряется.
- 🛑 Старый CLI останавливается, а не ломается:
iva updateвыполняется установленным кодом, и незнакомый старому коду токен в шаблоне юнита (класс поломки__DATA_DIR_ENV__, #191) ронял обновление три раза подряд. Теперь в репо лежитupdate-compat.jsonс самой старой версией CLI, способной поставить это дерево; апдейтер старше останавливается, ничего не тронув, и печатает выход:curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/repair.sh | bash- данные и.envостаются на месте. Та же подсказка уходит в Telegram: в ответ на обновление и в ежедневное уведомление о новой версии. В troubleshooting новый раздел. - 🩺
repair.shдоказывает, что сервис поднялся, прежде чем это сказать: раньше он печаталIva is repaired and updated., как только команда рестарта была принята, - а юнит в цикле рестартов принимает её каждый раз. Новыйiva _await-healthyждёт - с тем же лимитом 90 секунд, что и обновление, - покаiva.serviceстанет active и ответит на своём порту, и падает сразу, когда systemd от юнита отказался. При провале скрипт называет journal-команду, сохраняет бэкап и выходит с ненулевым кодом (#191).
- 📦 Установка больше не теряет
agent-browserиgwsна свежем VPS: проверенная загрузка ложилась в файл отmktempбез расширения, npm 11 читал такой путь как папку пакета и падал сENOTDIR … /package.json. Теперь тарбол скачивается в свой каталог под опубликованным именем (agent-browser-0.34.0.tgz,cli-0.22.5.tgz); проверка SHA-256 по-прежнему идёт до того, как файл попадает в npm, каталог после удаляется (#197). - 🧠 Агент снова читает память:
10-map.mdвелел модели зватьread_fileсvault/summaries/daily/…, а инструмент резолвит относительный путь от корня vault - получалосьvault/vault/…и ENOENT на каждой сводке дня. Все пути памяти для модели теперь vault-относительные (CORE.md,summaries/daily/…,cards/…- той же формы, что отдаётmemory_search), ночной rollup даёт модели абсолютные пути, а тест-страж падает на инструкции, которая вернёт префикс (#199). - 🗂️ CORE.md правится, а не переписывается: ночной rollup переписывал файл целиком по шаблону, и раздел, который владелец добавил руками, мог исчезнуть за ночь. Теперь rollup правит отдельные строки и только когда за день появился постоянный факт, предпочтение, цель или урок; день без нового оставляет файл байт в байт; разделы вне шаблона остаются как есть. Указатель «Последний день» пишет код после хода. Если заголовок
##, который был до хода, после него пропал - возвращается прежний файл и приходит один Alert с именем пропавшего раздела (#201). - ↪️ Пересланные сообщения несут источник: репост доходил до модели как слова владельца. Первая строка текста теперь
[forwarded from @user],[forwarded from channel Title (@name)]или[forwarded (hidden sender: Name)]- одинаково в контексте и в дневнике; из имени источника вычищаются скобки и переносы, так что заголовок канала не подделает метку. Allowlist не тронут: доступ по-прежнему решает фактический отправитель (#195). - 🔧 Три фикса рельсов обновления от контрибьюторов: восстановление сохраняет захваченные права, и дерево с групповой записью (
664/775подumask 002) больше не валит каждыйiva updateсgit recovery snapshot permissions do not matchиRollback: FAILED(#196); упавшее обновление удаляет свой recovery-stash так же, как успешное, и старые стэши не копятся вgit stash list(#200); изолированная сборка продвигает.eve/agent-summary.jsonвместе с.output, и/menu → Skillsпосле обновления больше не говорит «Skill list is unavailable» (#198).
Полная история - в CHANGELOG.md.
Агента запускает eve 0.30.8, агентный фреймворк Vercel; поисковый индекс живёт на SQLite, встроенном в Node 24, - без отдельной базы. Ива выросла из agent-second-brain и autograph - эта история рассказана в docs/ru/memory.md.
Ива становится лучше, потому что люди гоняют её по-настоящему - контрибуторам мы рады. Заводите issue о том, что сломалось, или присылайте PR. Все, кто уже помог: docs/thanks.md.
MIT - берите, меняйте, ставьте хоть на сто серверов; только не вините никого, если что-то сломается.





