Iva — персональный агент (smixs/iva)

GitHub: https://github.com/smixs/iva
Версия: 0.2.5 (15.07.2026, активная разработка, 55⭐)
Автор: тот же что ASB + autograph (smixs)

Что нового с 0.2.0 (04.07 → 18.07)

  • 🎙️ Voice/audio/video → транскрипт через Deepgram nova-3, авто-детект ru/uz/en
  • 👁️ Vision — фото описываются моделью самого провайдера, без доп. ключа
  • 🧾 Rich replies — таблицы/чеклисты/collapsible/формулы через Telegram Bot API 10.1
  • 📇 Personal CRM — кто люди, о чём договорились, когда напомнить
  • 🌐 Web search — 4 провайдера на выбор: Tavily, Exa, Parallel, Brave
  • 📮 Google Workspace — Gmail/Calendar/Drive/Sheets/Docs через gws CLI, ключи настраиваются прямо в чате
  • 🧩 Skills & MCP — подключаются файлом/сервером, ключи в .env
  • 🧪 Userbot (beta) — читает/пишет с личного Telegram-аккаунта (не бота), QR-подключение, anti-ban (FloodWait + пацинг + circuit-breaker). Статус на 24.07.2026: не настроен. Юнит iva-telegram-userbot.service disabled/inactive, TELEGRAM_API_ID/TELEGRAM_API_HASH в /home/claude/iva/.env не заданы (нужно получить на my.telegram.org, затем iva userbot setup)
  • 🛡️ Screening форвардов/ссылок/PDF перед тем как их видит модель
  • v0.2.3: codex-подписка (ChatGPT Plus/Pro, без API-ключа) работает end-to-end
  • v0.2.4: Google Workspace CLI, честные ошибки OpenRouter
  • v0.2.5: Telegram rich messages

Суть

Telegram-бот с долгосрочной памятью и ночной консолидацией. Прямое развитие agent-second-brain + autograph — упакованное в один установочный пакет.

curl -fsSL https://raw.githubusercontent.com/smixs/iva/main/install.sh | bash

Стек

КомпонентЧто
Фреймворкeve (Vercel agent framework); код — смесь Python/TS/JS/Shell
Модели4 провайдера: OpenCode Go (~20/мес), OpenRouter (pay-as-you-go, 300+ моделей), OpenAI по подписке Plus/Pro (без API-ключа). Дефолт — deepseek-v4-pro, 131k контекст, ~$9/мес all-in на Go
ПамятьBM25 через SQLite FTS5 (Node 24 built-in, нет внешних зависимостей)
Графautograph vault-graph.json — реранкинг по связям карточек
Векторный поископционально (Jina / DeepInfra / Ollama), по умолчанию выкл
Telegrampolling (не webhook)
Vaultта же структура что ASB: daily/weekly/monthly/yearly/cards + CORE.md

Архитектура памяти

🪵 СТВОЛ — year + карточки (люди, проекты, решения)
  🌿 ВЕТВИ — monthly ← weekly
    🍃 ЛИСТЬЯ — daily (дословный транскрипт)

Ночной rollup (пока спишь):

  • Дневные записи сворачиваются в недельные → месячные → годовые
  • Если факт изменился (работа, город, решение) — переписывает текущее, старое хранит с датой в ## History
  • Учится из поправок: “делай вот так” → записывает в CORE, применяет завтра
  • Теги достоверности: EXTRACTED (сам сказал) vs INFERRED (агент вывел)

Поиск (memory_search tool):

  • BM25 по title/meta/tags/body
  • Graph-реранк по vault-graph.json (autograph)
  • Hybrid режим: BM25 + dense через RRF (опционально)
  • Деградирует мягко: сбой FTS → наивный grep, не падает

Инструменты агента

ToolЧто делает
memory_searchРанжированный поиск по vault (BM25 + graph)
write_cardСоздать карточку с валидацией схемы (type enum)
read_file / write_fileРабота с файлами на сервере
bash / glob / grepShell-доступ
tasksСписок задач (add/show/done/remove)
web_search / web_fetchИнтернет

Субагенты: planner (декомпозиция задач)
Skills: morning-digest, web-research, agent-browser, [[infra/security]]-defense

Безопасность

  • Входящие (форварды, голос, файлы, веб) — детектор prompt-injection (невидимые символы, гомоглифы, override-фразы)
  • Исходящие — скрабинг API-ключей и токенов из ответов
  • Бот отвечает только разрешённым Telegram ID

Учёт токенов

  • Каждый вызов → data/usage.jsonl
  • /usage today|week|month|by-model|by-source в Telegram
  • iva usage в терминале

Сравнение с текущим стеком Сергея

IvaТекущий стек
Бот✅ Telegram pollingCoreClaw (Telegraf)
Долгая память✅ BM25 + graphASB + RAG (Qdrant, :8765)
Ночная консолидация✅ автоматическиdbrain-processor (ручной /process)
Поиск✅ ranked (смысл)BM25 + Qdrant (работает)
Факты без противоречий✅ rewrite + historyнет (просто append)
Валидация карточек✅ write_card zodнет (write_file произвольно)
МодельDeepSeek/Ollama (дёшево)Claude (дорого, умнее)
Установка1 командаручная сборка
Интеграция с forge❌ отдельный VPS✅ всё вместе

Что стоит взять в текущий стек (не мигрируя целиком)

  1. write_card с zod-валидацией — предотвращает невалидные карточки
  2. Rewrite вместо append в ночной консолидации — нет противоречащих фактов
  3. Graph-реранк в memory_search — уже есть autograph граф, можно подключить
  4. EXTRACTED vs INFERRED теги — разметка достоверности фактов
  5. Prompt-injection gate — для CoreClaw (форварды из каналов)

Если мигрировать

Плюсы: дешевле (DeepSeek vs Claude), лучше архитектура памяти, активное развитие
Минусы: теряем Claude (интеллект, рассуждение), разрываем интеграцию с forge
Рекомендация: запустить параллельно, потестить месяц Решено (18.07): тест на текущем сервере, не на новой VPS — ресурсов хватает (11GB RAM, 29GB диск свободно), конфликта polling нет (у Ивы свой токен бота). Единственный риск — общий blast radius, если install сломает systemd/порт на этой же машине

Установлено (18.07, 10:52): install.sh прошёл успешно. iva-telegram-poll active, 5 memory-таймеров (daily/weekly/monthly/yearly/doctor) стоят. Провайдер — OpenRouter, модель anthropic/claude-sonnet-4.5. Веб-поиск (Tavily/Exa/Parallel/Brave) и hybrid-память пропущены при установке — ключей не было, можно включить позже через iva config. Порт 8723, vault в ~/iva/vault, бэкап-репо Kobalt695/iva-vault (private) создан и запушен. Тест начат — правило источника правды в силе.

Готового перехода нет

Проверено (18.07): install.sh всегда сеет чистый vault-template/, авто-импортёра существующего ASB-vault нет, issues/discussions по миграции у автора отсутствуют. В README и docs/memory.md автор описывает ASB+autograph только как “prior art” — историю происхождения, не как апгрейд-путь. Перенос был бы ручным: карточная схема (schema.json) — прямой потомок autograph, почти совпадает с нашей (type/description/tags/status), так что cards/* переносятся с минимальной правкой; daily/YYYY-MM-DD.md — тот же формат, копируется как есть. А вот структура отличается: у Ивы daily → summaries/daily|weekly|monthly|yearly → cards, у нас daily → goals/thoughts/business/projects — переносить пришлось бы по разделам, а не одним скриптом.

Практический план перехода (если решим тестировать)

Масштаб переноса на 18.07: 34 карточки в thoughts/business/projects/goals, 37 daily-файлов.

  1. Текущий сервер (решено 18.07, не новая VPS) — свой токен бота у Ивы, свой порт, свои systemd —user юниты iva-*, отдельный vault-каталог. RAG (dbrain-rag), n8n-воркфлоу и другие интеграции продолжают смотреть на старый vault без изменений — трогать их не нужно, пока не решим о полном переходе
  2. install.sh, мастер: провайдер модели (Claude недоступен напрямую — только через OpenRouter pay-as-you-go по слагу anthropic/claude-sonnet-4.5; иначе OpenCode Go ~20/мес), Deepgram-ключ, новый бот-токен, свой Telegram ID
  3. Тест месяц параллельно, второй бот, dbrain-* не трогать, никакого переноса карточек ещё не делаем. Правило источника правды (18.07): реальные факты/задачи/CRM — только через старого dbrain-bot в старый vault; Ивиному боту на время теста — только тестовые сообщения (голос/фото/CRM-демо), не реальные данные. Иначе split-brain: часть фактов осядет только у неё, часть — только у нас, и перенос при переезде придётся сверять в обе стороны вместо одностороннего переливания
  4. В день реального переезда (решение “да, переходим”): стоп новым записям в старый vault → ручной перенос один раз (daily/*.md как есть; карточки разнести по cards/{contacts,decisions,ideas,notes,projects}/ и поправить frontmatter под её schema.json; MOC.md и .graph/ не переносить — пересоберутся сами) → старый vault замораживается как архив
  5. Отключать dbrain-bot/watchdog/rag/process/doctor только после этого, не раньше
  6. Доп. стоимость на время теста: +~$9/мес поверх текущей Anthropic-подписки

Известные проблемы

  • 2026-08-24: iva-update-check.service failed → исправлено. Причина: repo ~/iva в detached HEAD на теге v0.3.20 (так оставил install.sh), а апдейтер (scripts/lib/update-channel.ts, дефолт DEFAULT_UPDATE_BRANCH="main") требует именованную ветку → падал с detached HEAD: switch to the update branch first. Фикс: cd ~/iva && git checkout -B main HEAD (перевёл на тот же коммит, файлы не менялись). После фикса юнит прошёл успешно (exit 0) и сразу разослал уведомление об апдейте.
  • 2026-08-25: OpenRouter-баланс исчерпан → Ива шлёт «Баланс/тариф провайдера исчерпан». Текущий провайдер в .env: MODEL_PROVIDER=openrouter, OPENROUTER_MODEL=deepseek/deepseek-chat (сменился с anthropic/claude-sonnet-4.5, когда именно и кем — не зафиксировано). Проверка curl https://openrouter.ai/api/v1/credits показала total_credits: 83, total_usage: 82.89 — на счету осталось <11 центов, ключ рабочий, просто кончились деньги. Текст ошибки формируется в agent/lib/error-humanizer.ts по паттерну insufficient_credits|billing|402 в ответе провайдера — не баг, честная диагностика. Решение не принято: либо пополнить OpenRouter, либо переключиться командой /model на бесплатного провайдера ollama (Ollama Cloud, дефолт deepseek-v4-pro, compatibleReasoning: true) — доступные провайдеры и модели: agent/lib/model-provider.ts (ollama/opencode/codex/openrouter, у каждого свой *_MODEL/*_VISION_MODEL в .env).
  • 2026-08-24: обновление 0.3.20 → 0.3.31 применено. Штатная команда iva update (алиас npm run iva -- update в корне репо = node bin/iva.mjs update, делает git pull + build + версионированный релиз + restart). С первого раза упало на сборке: eve build требует Node ≥24, а в PATH по умолчанию стоит /home/claude/.local/bin/node v22.22.3 (не через nvm). Решение — перед командой добавить в PATH /home/claude/.nvm/versions/node/v24.18.0/bin. После этого сборка и релиз прошли чисто, iva-telegram-poll.service сам перезапустился на новой версии. Важно на будущее: репо теперь версионировано (~/iva/versions/0.3.31-<hash>/, старое дерево файлов “retired”) — cd ~/iva && npm run ... больше не сработает напрямую, package.json больше не лежит в корне ~/iva.

Связанные записи

Смежные инструменты (изучены в той же сессии)

  • vercel-labs/skills — CLI менеджер skills для агентов (npx skills), каталог на skills.sh
  • obra/superpowers — 14 skills для Claude Code: brainstorming, debugging, TDD, planning и др. Установлены.
  • thedotmack/claude-mem — автоматическая память между сессиями (хуки + SQLite + ChromaDB). Установлен.
  • google-antigravity/antigravity-cli — Google’s аналог Claude Code (TUI, agy). Установлен, версия 1.1.4. Геоблок НЕ снят (переподтверждено 20.07): вывод от 18.07 “работает” был ошибочным — тогда проверялся только agy -p (print-режим), который иногда обходит проверку. Обычный интерактивный чат стабильно блокируется: agy → любое сообщение → ⚠ Eligibility Check failed: ...not currently available in your location, без ответа. Воспроизведено чисто в отдельном tmux-окне 20.07. Не подключён к ccbot через tmux. Практически — CLI сейчас непригоден для реального использования, пока Google не откроет регион.