Skip to content

Latest commit

 

History

History
220 lines (139 loc) · 31.3 KB

File metadata and controls

220 lines (139 loc) · 31.3 KB

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-док, ссылка в чате.

Остальное - для предпринимателей, специалистов, руководителей и просто жизни: Юзкейсы.

Как это работает

Как работает Iva: голосовые, тексты, фото и PDF летят из Telegram в агента-иву, вокруг - память, ночная сборка, cron, напоминания, поиск, веб, workspace и документы

Мост опрашивает 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 помнит: лист - день, ветви - недели и месяцы, годовые кольца - годы вокруг CORE.md

Слой Что там живёт Путь
🍃 Листья дословный транскрипт каждого дня, вместе с ответами 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

Секретарь в Telegram: userbot читает групповые чаты с вашего аккаунта, собирает сводки и отвечает от вашего имени под серверным анти-бан гардрейлом

Бот - половина Telegram. Вторая половина - ваш личный аккаунт: подключите userbot (бета, по желанию), и Iva станет работать из него как секретарь. Читает групповые чаты, до которых у вас не доходят руки, собирает их в сводки, ловит сообщения, где нужны именно вы, и отвечает от вашего имени.

  • Телеграм целиком - группы, каналы, непрочитанное, поиск и вся история личного аккаунта.
  • Подключение в чате - пишете боту «подключи мой телеграм», сканируете QR. Терминал не нужен.
  • Анти-бан гардрейл на сервере - пауза по FloodWait, случайная задержка после каждой отправки, автостоп после трёх FloodWait за 24 часа. Он живёт в прокси, а не в промпте, и накрывает три исходящих вызова, из-за которых аккаунты и режут: сообщения, файлы, пересылки. Вступления, инвайты, импорт контактов и реакции не обёрнуты - эти ограничения держит файл скилла, то есть промпт.
  • Режим «только чтение» - один переключатель в .env, и Iva читает и ищет, но отправлять не может физически.

Warning

Автоматизация личного аккаунта нарушает правила Telegram, аккаунт могут ограничить или забанить. Юзербот - бета, включается вручную и на ваш собственный риск; чтение заметно безопаснее отправки. Подробности: docs/userbot.md.

Безопасность и приватность

Недоверенный ввод из Telegram и веба проходит гейт безопасности: заражённые сообщения падают в отсев, до vault доходит только чистый контекст

Веб-страницы, выдача поиска, расшифровки голосовых, подписи и описание присланной картинки доходят до модели только через санитайзер 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
  1. Возьмите токен бота у @BotFather.
  2. Запустите установщик и ответьте на его вопросы.
  3. Напишите своему боту. Мастер достанет ваш 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.

Шаг 0 (опционально): подготовка свежего VPS

Только что купили VPS и сидите под root? Этот скрипт готовит машину до установки Ивы: заводит sudo-пользователя (сразу с linger), обновляет систему и ставит зависимости. Заодно включает фаервол (наружу открыт только SSH), fail2ban и автоматические обновления безопасности, а вход под root по SSH закрывает.

bash <(curl -fsSL https://raw.githubusercontent.com/smixs/iva-agent/main/bootstrap.sh)

Спросит три вещи - логин, пароль и часовой пояс, - SSH-ключ не нужен. Если обновилось ядро, предложит перезагрузку. Повторный запуск безопасен: уже настроенное скрипт не ломает.

Дальше переподключитесь созданным пользователем с тем же паролем и запустите команду установки из начала раздела.

Первая минута

Три сообщения, чтобы увидеть память в работе:

  1. Наговорите голосовое про свой день - что угодно, вслух. Потом загляните в папку daily/ внутри вашего vault на сервере: ваши слова лежат там обычным markdown, с датой, и они ваши. Больше ни один ассистент не отдаёт вам файл.
  2. Скажите то, что запомнил бы коллега: Марина из Acme ждёт пересчитанное КП к пятнице, по телефону не отвечает никогда.
  3. Спросите обратно по-человечески: как мне дожать Марину? - ответ придёт из карточки, которую Ива только что завела, а не из последних сообщений.

Дальше пришлите фото визитки или перешлите длинный пост и попросите суть. Остальное - в /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 - развернуть последние релизы

26.08.2026

v0.3.33

  • 🧾 Длинное и форматированное сообщение больше не пропадает молча: с 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.

25.08.2026

v0.3.32

  • 📣 Уведомление о новой версии теперь говорит, что нового: ежедневный Alert «доступна новая версия Ивы» перечисляет заголовки всех релизов между вашим и свежим, на вашем языке, новые сверху, со ссылкой на полный список. Источник - секция What's New README на предлагаемом коммите: второй changelog не заводится; README, который не распарсился, стоит блока, но не уведомления. Каждый пункт этой секции теперь открывается эмодзи и жирным заголовком - именно его показывает уведомление.

24.08.2026

v0.3.31

  • 🔁 Reply на старое сообщение бота больше не вешает бота: сессии закрываются постоянно (ночной сброс, ротация, /new, рестарт при обновлении), а ответ-цитата на сообщение закрытой сессии маршрутизировался как её продолжение. Доставка падала с target session was not found via continuation token, элемент оставался в inbox-очереди, и поллер повторял его каждый цикл - сотни ошибок, бот не отвечал никому (#203). Теперь такой reply доставляется один раз обычным новым сообщением (цитата теряет старый контекст, пользователь получает ответ), а этот класс ошибки больше не может удержать элемент в очереди. Транзиентный сбой - рестарт eve, таймаут - ретраится как раньше, сообщение не теряется.

v0.3.30

  • 🛑 Старый 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).

v0.3.29

  • 📦 Установка больше не теряет 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 - берите, меняйте, ставьте хоть на сто серверов; только не вините никого, если что-то сломается.