Мы проверили, как агент правит файлы в 250 сессиях нашей команды. Около 590 раз он писал в файлы через shell, хотя у него были инструменты edit и write. 442 из этих записей появились из-за одной фразы в одном навыке. Таких историй за время разработки Veai CLI у нас набралось много.
Veai CLI работает в терминале, как Claude Code и Codex. Сегодня вышла его первая публичная версия. Модели Anthropic, OpenAI, Google, DeepSeek, GLM и Qwen доступны в нём по одной подписке и без VPN, а оплатить подписку можно российской картой.
Сначала расскажем, кому нужен Veai CLI, что он умеет и чем отличается от Claude Code, Codex, OpenCode и Koda CLI. Потом, в разделе “Под капотом”, объясним, как он устроен и на чём мы спотыкались. Тарифы и установка в конце статьи.
Кому это нужно
Хороших терминальных агентов много, но из России к ним сложно подключиться. Подписка Claude в Claude Code даёт только модели Anthropic, а подписка ChatGPT в Codex даёт только модели OpenAI. Обе подписки оплачиваются зарубежной картой, а работать с ними приходится через VPN.
Модели других провайдеров в этих агентах можно подключить через свой API-ключ или шлюз. Есть и агрегаторы вроде OpenRouter, которые дают и Claude, и GPT по одному ключу. Но OpenRouter принимает зарубежные карты, AliPay и криптовалюту, российские карты для него не подходят.
Мы делали Veai CLI для разработчиков, которые:
хотят работать в терминале с топовыми моделями Anthropic и OpenAI без VPN и зарубежной карты;
выбирают модель под задачу и не хотят привязываться к одному провайдеру;
запускают несколько агентов параллельно и хотят видеть, чем занят каждый;
работают в компании с собственным шлюзом к моделям или с локальной моделью.
Что умеет Veai CLI
Модели разных провайдеров в одной подписке
Модель переключается командой /model прямо в чате. Можно начать задачу на Opus, проверить решение на GPT и отдать рутину Qwen или GLM. В подписку входит много моделей, среди топовых: Opus 5.5, GPT 6.1 Sol, Gemini 4 Argon, GLM 5.3, Qwen 3.8 Max и DeepSeek V4.1 Flash.

Минута работы стоит одинаково для всех моделей тарифа. При этом умные модели обычно отвечают медленнее, поэтому на ту же задачу тратят больше минут. Сложные задачи имеет смысл отдавать сильной модели, а рутину поручать быстрой.
Если не хочется выбирать модель самому, есть два режима:
autoведёт на одну заранее выбранную модель и списывает половину минуты за каждую минуту работы;autopilotсам подбирает модель под задачу по соотношению цены и качества и может менять её между ходами. Минуты считаются по времени работы модели, как обычно, но с постоянной скидкой в четыре раза: за минуту работы списывается четверть минуты.
Свой шлюз или локальная модель
Командой /custom-provider можно подключить корпоративный шлюз или локальную модель. Агент будет работать через них, остальные возможности CLI сохранятся.
Субагенты и фоновые задачи
Агент может сам разделить работу между субагентами: пока один гоняет тесты, второй разбирается в пул-реквесте, а вы пишете следующую задачу. Долгие команды тоже уходят в фон. Можно запустить сервер для разработки или сборку и продолжать работать.
Вот пример. Мы попросили агента прогнать тесты в проекте из трёх модулей и починить падения. Агент запустил три форка, то есть три ветки текущего чата, по одной на модуль. Под чатом появилась панель с их состоянием.

Любой форк можно открыть и посмотреть, что он делает прямо сейчас: какую задачу ему дал основной агент, какие инструменты он вызывает и что выводят команды.

Закончив, форк присылает отчёт: что сделано, какие файлы затронуты, что осталось непроверенным. В модуле cluster-api все 160 тестов прошли, и форк ничего не менял. Он также пишет, что запускал тесты с отключённой проверкой форматирования, поэтому её результат неизвестен.

Если форку нужно разрешение на команду, запрос появляется в основном окне. В нём видно, какой форк спрашивает и почему:

Каждый форк и субагент расходует минуты сам. Три параллельных форка списывают минуты втрое быстрее, чем один.
Быстрый вопрос, не отвлекая агента
Команда /btw работает так же, как в Claude Code: задаёт вопрос по текущему чату, пока агент продолжает работу. Ответ строится только по тому, что уже есть в чате, инструменты при этом не выполняются. /btw видит и результаты команд текущего хода, если они уже пришли, но не видит ответ, который модель ещё пишет, и команду, которая ещё выполняется. Ответ приходит в отдельном окне, вопрос не попадает в историю основного агента и не сбивает его. Ниже агент чистит список MCP-серверов, а мы тем временем спрашиваем, какие серверы ещё полезно подключить.

Режимы разрешений и выбор модели на одном колесе
По Shift+Tab открывается колесо, как выбор оружия в играх. На нём переключаются режим разрешений, модель и уровень рассуждений.

Режимов разрешений четыре:
обычный спрашивает про опасные команды, которые распознаёт разбор, и про команды, которые разобрать не удалось.
python -c,node -eи скрипты он выполняет без вопроса, для них есть параноидальный режим;параноидальный спрашивает про любую команду, если не уверен, что она только читает;
без запросов (в интерфейсе YOLO) ничего не спрашивает;
“я отошёл” тоже ничего не спрашивает, а на вопросы агента отвечает, что вас нет, и агент продолжает работу до конца задачи. Опасные команды в этом режиме не блокируются, поэтому включайте его только там, где это допустимо.
Агент настраивает себя сам
Чтобы подключить MCP-сервер или написать правило, документацию читать не нужно. Достаточно написать в чат: “Подключи MCP-сервер context7”. Документация CLI поставляется вместе с ним, агент найдёт нужный раздел и сам поправит конфиг. После перезагрузки конфигурации сервер появляется на экране /mcp вместе со своими инструментами.

Управление из Telegram
К запущенной сессии можно подключиться из Telegram и давать агенту задачи, не сидя за компьютером. Запросы разрешений и вопросы агента приходят карточками с кнопками. Работает это через вашего собственного бота.
Сравнение с другими агентами
Мы сравнили Veai CLI с Koda CLI, Claude Code, Codex и OpenCode. Базовые возможности есть у всех пяти в том или ином виде, а различия начинаются в деталях.
Возможность |
Veai CLI |
Koda CLI |
Claude Code |
Codex |
OpenCode |
|---|---|---|---|---|---|
Субагенты, память, навыки, правила, MCP |
Да |
Да |
Да |
Да |
Да |
Свои модели или шлюз |
Да |
Да |
Да¹ |
Да |
Да |
Самонастройка агента |
Да |
Да |
Да |
Да |
Да |
Панель фоновых субагентов и команд |
Да |
Да |
Да |
Частично² |
Частично³ |
Управление из Telegram |
Да |
Да |
Частично⁴ |
Нет |
Нет |
Удалённое управление через веб или приложение |
Нет |
Нет |
Да⁵ |
Частично⁶ |
Да⁷ |
Форки чата, которые запускает сама модель |
Да |
Частично⁸ |
Да |
Частично⁸ |
Частично⁸ |
Автоподбор модели под задачу |
Да |
Нет |
Частично⁹ |
Частично¹⁰ |
Частично¹⁰ |
¹ Через Anthropic-совместимый шлюз. ² Команда /ps для фоновых терминалов. ³ Фоновые субагенты есть, панели в TUI нет. ⁴ Через плагин Channels, пока в бета-версии. ⁵ Remote Control. ⁶ Через приложение ChatGPT, пока в бета-версии. ⁷ opencode web и attach. ⁸ Только вручную, командой /fork. ⁹ Алиас opusplan и своя модель для субагента. ¹⁰ Своя модель для агента.
В подписках различий больше. У OpenCode есть подписка Go и оплата по факту через шлюз Zen. Оба варианта оплачиваются только зарубежной картой. Opus и топовых GPT в подписке Go нет, они есть только в Zen. В таблице мы сравниваем подписки, поэтому для OpenCode указана Go.
Что входит в подписку продукта |
Veai CLI |
Koda CLI |
Claude Code |
Codex |
OpenCode Go |
|---|---|---|---|---|---|
Топовые модели Anthropic |
Да |
Частично¹ |
Да |
Нет |
Нет |
Топовые модели OpenAI |
Да |
Частично¹ |
Нет |
Да |
Нет |
Gemini, GLM, Qwen, DeepSeek |
Да |
Частично² |
Нет |
Нет |
Да |
Работа без VPN |
Да |
Да |
Нет |
Нет |
Не указано |
Техподдержка на русском |
Да |
Да |
Нет |
Нет |
Нет |
Договор с российским юрлицом |
Да |
Да |
Нет |
Нет |
Нет |
Оплата российской картой |
Да |
Да |
Нет |
Нет |
Нет |
¹ Как внешние модели с отдельным лимитом. ² Qwen и GLM.
Есть и то, в чём мы уступаем. Код Veai CLI закрыт, а у Codex и OpenCode он открыт. Подключиться к сессии можно только из Telegram, веб-интерфейса и мобильного приложения у нас нет. Песочницы на уровне ОС тоже нет, подробнее об этом в разделе про разрешения.
Под капотом
Этот раздел для тех, кто уже работал с Claude Code, Codex или OpenCode и знает, что такое кэш промпта и вызов инструмента.
Почему pi
Когда собираешь своего агента, есть три пути: написать цикл с нуля, форкнуть большой готовый агент или взять маленькое ядро и наращивать его расширениями.
Писать с нуля долго, а цикл, где модель вызывает инструмент и получает результат, уже много раз написан. Большой агент сразу тянет за собой чужие решения по архитектуре, интерфейсу и промптам. Мы выбрали третий путь: pi Марио Цехнера.
Автор называет pi минимальным агентом, который подстраивают под свой процесс. В посте о pi он перечисляет, чего в ядре нет и не будет: субагентов, plan mode, MCP, фонового bash, встроенных to-do и запросов разрешений. По умолчанию pi работает в режиме YOLO, то есть выполняет любые команды без подтверждения. В ядре четыре инструмента: read, write, edit, bash. Системный промпт вместе с описаниями инструментов занимает меньше 1000 токенов.
Нам это подошло. Почти всё поведение, включая интерфейс в терминале, задают TypeScript-расширения с хуками на каждом этапе цикла. Движок мы не форкаем: pi подключён как зафиксированная зависимость, продуктовое поведение живёт в наших расширениях. В нескольких местах расширения точечно подменяют поведение движка, но своей копии pi с правками у нас нет, и обновления апстрима переносить не нужно.
Обёртка запускает движок с флагами вроде --no-extensions --no-skills --no-context-files, поэтому ваши личные пакеты pi и папка .pi/ в проекте на Veai CLI не влияют. AGENTS.md, CLAUDE.md, .veai/rules и навыки загружает наш загрузчик, в том числе навыки из папок других агентов: .claude/skills, .cursor/skills и других.
Почему не OpenCode
Многие берут за основу OpenCode и подключают к нему свои модели. Например, так устроен src code в SourceCraft CLI.
У OpenCode есть плагины, и возможностей у них много. Плагин может заменить встроенный bash своим инструментом, а экспериментальные хуки позволяют переписать системный промпт и сообщения перед запросом к модели. Но интерфейс плагины почти не меняют: им доступны добавление текста в поле ввода, команды и всплывающие уведомления. Панель субагентов, колесо режимов и окно /btw так не сделать. Пришлось бы править само приложение, а у OpenCode клиент-серверная архитектура и большая кодовая база, и каждую правку пришлось бы переносить при обновлениях апстрима. Нам нужно было менять и поведение агента, и интерфейс, поэтому мы выбрали маленькое ядро.
Что мы написали сами
Для pi уже есть пакеты с субагентами, фоновыми задачами, MCP и веб-поиском. Мы начинали с них, но большую часть заменили своими: по качеству работы и удобству интерфейса они нас не устроили. Сами мы написали субагентов и форки, управление командами и фоновыми задачами, систему разрешений, правила и навыки, интеграцию с Telegram, строку статуса, колесо режимов, уведомления и встроенную документацию для самонастройки.
Там, где готовые пакеты работали хорошо, мы их оставили и обернули своим конфигом и интерфейсом. Это MCP-клиент (pi-mcp-adapter), веб-поиск (pi-web-access), вопросы пользователю и список задач (rpiv-ask-user-question, rpiv-todo). Подключение своего провайдера основано на пакете под MIT. В нём мы исправили одну проблему: пакет объявлял у модели возможности, которые никто не проверял.
Субагенты и форки, которые попадают в кэш
Первым мы попробовали открытый пакет pi-subagents. Он сам собирал командную строку дочернего процесса и подключал туда только свои расширения. У субагента не было веб-поиска, правил проекта и политики разрешений, то есть по набору возможностей он сильно отличался от основного агента. Кроме того, форки в нём не попадали в кэш промпта.
От кэша сильно зависит цена. У Anthropic чтение из кэша стоит 0,1 от базовой цены входных токенов, а запись 1,25. Кэш срабатывает только на побайтно совпадающем префиксе. Если у субагента системный промпт отличается хотя бы на одну строку или в списке на один инструмент меньше, вся история основного агента оплачивается заново, да ещё по тарифу записи.
На подписке Veai минуты считаются по времени работы модели, и кэш помогает и здесь: Anthropic отмечает, что он сокращает время обработки запроса. Со своим ключом кэш экономит деньги напрямую.
Поэтому делегирование у нас двух видов:
subagentзапускает нового агента с пустым контекстом. Он нужен, когда важен независимый взгляд, например для ревью;forkсоздаёт ветку от последнего завершённого хода основного агента. У форка побайтно тот же системный промпт, те же схемы инструментов в том же порядке, та же модель и тот же уровень рассуждений. Рассуждения прошлых ходов он получает в исходном виде: у Anthropic это подписанные блоки рассуждений, у OpenAI зашифрованные элементы рассуждений. Для моделей OpenAI форк к тому же передаёт тот жеprompt_cache_key, что и основной агент. Это подсказка провайдеру, которая повышает шанс попасть в кэш, но не гарантирует его.
Модель и уровень рассуждений форк берёт у основного агента, задать свои нельзя. Если вы сменили модель на колесе, истории для новой модели в кэше нет, и первый запрос форка оплатит её запись.
Разницу видно на проверочном прогоне на Sonnet. В первом запросе форка 17 234 токена истории были прочитаны из кэша, и только 639 новых токенов в кэше не нашлось. Этим прогоном мы поймали баг: в TUI дочерний процесс терял один инструмент и промахивался мимо кэша целиком. В таком случае все 17 873 токена пошли бы по тарифу записи. Теперь основной процесс передаёт дочернему список активных инструментов явно.
Что ещё стоит знать о субагентах:
Вложенных субагентов нет. Инструменты
forkиsubagentостаются в схеме дочернего агента, чтобы префикс совпадал, но их вызов отклоняется с ошибкой.Если лимит параллельных субагентов исчерпан, новый запуск отклоняется. Модель получает отказ и сама решает, что остановить. Скрытая от модели очередь работала хуже.
Если субагент закончил ход и не отчитался, CLI напоминает ему об отчёте, а после нескольких напоминаний завершает его с ошибкой.
/btw сделан на том же механизме. У него те же схемы инструментов, что у основного агента, но вызовы блокируются до выполнения. Поэтому префикс совпадает и берётся из кэша.
Терминал и фоновые задачи
В pi bash синхронный. Автор так решил намеренно и вместо фоновых процессов предлагает tmux. Для продукта этого мало: агенту нужно запустить сервер для разработки или долгую сборку и продолжать работу.
Мы заменили bash одноимённой реализацией с общим менеджером задач и добавили bash_output и bash_kill. Команду можно сразу запустить в фоне. Вывод пишется в файл, поэтому агент может позже прочитать хвост лога или подождать результат заданное время.
Время ожидания задаёт сама модель параметром timeout. По умолчанию это 120 секунд, максимум час, и оба значения указаны в описании инструмента. Если команда не уложилась, CLI её не останавливает: она отсоединяется и продолжает работать в фоне. Модель получает сообщение с номером задачи и знает, что о завершении ей сообщат.
Открытые реализации мы не взяли, а от нескольких идей отказались:
pi-background-tasksскладывает служебные файлы в.pi/tasksвнутри вашего проекта. Мусорить в репозитории мы не хотели.В oh-my-pi команда автоматически уходит в фон по порогу, которого модель не задавала и о котором не знает. Для модели это неожиданная смена поведения. У нас порог всегда тот, что модель указала сама или увидела в описании инструмента.
Детектор команды, которая зависла в ожидании ввода, мы написали и выкинули. Его эвристика по знаку
?в конце строки срабатывала на обычных строках логов.
Чтобы агент не забывал о запущенном, CLI напоминает ему о работающей фоновой задаче через 4, 8 и 30 минут. Была и гонка внутри движка: уведомление о завершении фоновой задачи могло прийти одновременно с вашим сообщением и перехватить ход. Мы закрыли её в своём расширении, без правок движка. Когда вы отправляете сообщение, расширение ставит метку, и уведомления ждут начала хода.
Разрешения без LLM-классификатора
Запросов разрешений в pi нет, поэтому систему разрешений мы писали сами. Сложнее всего оказался разбор bash-команд.
Регулярные выражения тут бесполезны: env FOO=1 timeout 5 bash -c "rm -rf ~" прячет опасную команду за безобидными обёртками. Поэтому CLI разбирает команду в синтаксическое дерево и раскрывает обёртки (env, sudo, timeout, xargs), bash -c, подстановки $(...) и trap на глубину до восьми уровней. Логику и списки опасных команд мы перенесли из Codex (Apache-2.0) и проектов cc-safety-net и Dippy (MIT).
CLI спрашивает пользователя, если вложенность глубже восьми уровней, если команда содержит eval, если имя команды не записано буквально ($CMD, $(which rm)), если скрипт приходит через pipe и если команду не удалось разобрать.
Перед релизом мы провели ревью с попытками обойти правила. Нашлись, например, /bin/r? -rf ~ (glob в имени программы), bash <<< (команда через here-string), .gi?/config и .GIT (обход защиты папки .git через glob и регистр). Эти обходы мы закрыли.
У проверки есть границы. Она защищает от ошибок модели, но песочницей не является: изоляции на уровне ОС у нас нет. В Codex песочница включена по умолчанию на macOS, Linux и Windows. В Claude Code она по умолчанию выключена, включается командой /sandbox и на Windows без WSL2 не работает.
Защищённые пути CLI проверяет только для команд записи, которые он распознаёт: sed -i, перенаправлений, tee, cp и mv. python -c, node -e и скрипт, который агент сам записал и запустил, CLI отдельно не распознаёт. Поэтому, например, python -c "open('.git/config','w')" в обычном режиме пройдёт без вопроса.
На Windows без Git Bash инструмент bash выполняет команды в PowerShell. Модель об этом знает: описание инструмента просит её писать на синтаксисе PowerShell. Своего разбора PowerShell у политики разрешений пока нет.
Два ограничения мы ввели намеренно:
Режим разрешений нельзя задать файлом в проекте. Иначе склонированный чужой репозиторий мог бы отключить вам подтверждения.
От LLM-классификатора опасных команд мы отказались. Он недетерминирован и добавляет задержку к каждой команде.
Правила и список задач вне истории сессии
Правила подхватываются из AGENTS.md, CLAUDE.md и .veai/rules. Каждое правило доставляется в своё место: в системный промпт, в сообщение пользователя, при вызове определённого инструмента или при чтении файла по шаблону пути.
Правила для системного промпта собираются в начале каждого хода пользователя и в течение хода не меняются. Если вы изменили такое правило, оно попадёт в промпт со следующего хода, и кэш на этом ходу начнётся заново.
Остальные правила приходят, когда срабатывает их триггер: ваше сообщение, результат нужного инструмента или чтение подходящего файла. Хук движка добавляет такое правило перед запросом к модели в конец контекста отдельным скрытым сообщением. Он работает с копией контекста, поэтому в истории сессии правила нет и историю оно не раздувает.
У такого подхода есть цена для кэша. Для моделей Anthropic движок ставит точки кэша на системный промпт, на список инструментов и на последний блок запроса. Последним блоком часто оказывается как раз скрытая вставка. Поэтому запись в кэш заканчивается вставкой, а на следующем запросе её на этом месте уже нет. Системный промпт и инструменты при этом читаются из кэша всегда, а для истории совпадение с прошлой записью не гарантировано.
Точно так же в конец каждого запроса добавляется список открытых задач. В истории он не хранится, и модель видит актуальный список, даже если создала его сто ходов назад. После сжатия контекста правила системного промпта и список задач на следующем запросе будут на месте, а остальные правила придут снова при новом срабатывании триггера.
Прерывание, которое модель понимает
pi выбрасывает из запроса прерванное сообщение ассистента. Вы нажали Esc посреди правки, модель об этом не узнала и на следующем ходу “доделала” то, что вы только что остановили. Теперь CLI вставляет в историю маркер [Request interrupted by user], и модель видит, где её остановили.
Как одна фраза в навыке дала 442 записи через shell
Вернёмся к истории из начала статьи. Мы разобрали 250 сессий, записанных во время разработки, и посчитали, как агент меняет файлы. Через edit прошло около 280 правок, через write около 222, через shell около 590: heredoc и cat >>, cat >, скрипты на Python и sed -i. 442 из них оказались дописыванием в одну заметку. Причиной была фраза “append to the note after every answer” в навыке из нашего собственного репозитория.
Фразу мы переписали, а в промпт CLI добавили указание менять файлы через edit и write. Так правки видны как изменения файлов. Через shell они выглядели бы как обычные успешные команды.
Telegram без нашего сервера
Интеграция с Telegram работает через вашего бота, созданного в BotFather. Наши серверы в ней не участвуют: CLI сам обращается к Bot API. При этом переписка с ботом хранится у Telegram и не защищена сквозным шифрованием.
Каждой сессии соответствует отдельная тема в форум-группе, после завершения сессии тема удаляется. Если ответить на карточку и в терминале, и в Telegram, засчитается первый ответ. Если запущено несколько процессов CLI, новые сообщения из Telegram забирает только один из них. Когда он завершается, эту роль перехватывает другой.
Сейчас из Telegram можно подключаться к уже запущенным сессиям, а новые сессии запускаются только в терминале.
Прогрев кэша
Этот раздел пригодится в первую очередь тем, кто работает со своим ключом Anthropic. Модели по подписке Veai не прогреваются, и минуты подписки на прогрев не тратятся.
Кэш Anthropic по умолчанию живёт пять минут. Если вы думали над ответом дольше, следующий запрос снова оплатит запись всей истории. Anthropic описывает два способа этого избежать: кэш на час, запись в который стоит 2× вместо 1,25×, и прогрев коротким запросом.
Механизм прогрева взят из движка pi, мы открыли его в настройках CLI и описали в документации. Когда прошло 90% срока жизни кэша, но не позже чем за 10 секунд до его истечения, он повторяет последний запрос с лимитом ответа в один токен. Такой запрос оплачивается как чтение кэша плюс один выходной токен.
Прогрев срабатывает, только если ожидаемая экономия не меньше $0,05. Она считается так: стоимость повторной записи всей истории за вычетом чтения, умноженная на вероятность, что настоящий запрос придёт до истечения кэша, минус стоимость самого прогрева. Пока агент работает, эта вероятность равна единице. В простое авторы pi по своим замерам принимают её за 15%.
У настройки три значения:
off: прогрев выключен, это значение по умолчанию;streaming: кэш прогревается, пока агент работает над вашим запросом. Это полезно, когда агент ждёт долгую сборку, тесты или медленный инструмент дольше пяти минут, а контекст большой и модель дорогая. Когда запрос выполнен, прогрев прекращается, и не позже чем через час;idle: кэш прогревается ещё до 30 минут после последнего запроса, пока вы думаете над следующим сообщением.
Прогрев прекращается и тогда, когда беседа ушла в другую сторону: вы переключились на другую ветку или сессию либо контекст сжали. Включается он командой veai config set cacheWarming streaming (или idle). Часовой кэш включается переменной окружения VEAI_CACHE_RETENTION=long.
Прогрев работает для моделей Anthropic со своим ключом. Свои провайдеры через /custom-provider и модели Claude с фиксированным бюджетом рассуждений не прогреваются.
Windows
С Windows пришлось повозиться отдельно.
Медленный холодный старт мы сначала списывали на Node. Оказалось, что антивирус сканирует каждый файл при первом открытии. При старте открывалось больше тысячи файлов, и холодный запуск растягивался на десятки секунд. Мы собрали зависимости в несколько бандлов, и теперь при старте открывается 127 файлов вместо 1237.
Установщик ставит свою версию Node и не использует системную: она может оказаться несовместимой или нестандартно настроенной.
Уведомления о завершении задачи приходят через системные уведомления Windows, в других ОС через escape-коды терминала,
notify-sendилиosascript. Пока терминал в фокусе, уведомления не показываются.
Сколько стоит
Подписка Veai тарифицируется по минутам. Минутой считается чистое время работы API модели: пока провайдер обрабатывает запрос, включая ожидание в его очереди, и пока модель генерирует ответ. Запросы, которые завершились ошибкой, не тарифицируются. Пока вы читаете код или думаете над задачей, а агент выполняет команды и тесты, минуты не тратятся. Расход зависит от модели и скорости её ответа, от размера истории чата и от числа субагентов: каждый из них делает свои запросы к модели.
Тариф |
Минут в месяц |
Цена в месяц |
Что ещё |
|---|---|---|---|
Персональный |
200 |
2 800 ₽ |
|
Профессиональный |
1 000 |
10 000 ₽ |
приоритетный доступ, расширенный SLA |
Ультра |
6 000 |
50 000 ₽ |
всё из Профессионального, эксклюзивные модели Fable 5.1 и GPT 6 Astra |
Подписка продлевается каждые 30 дней. Если вы её отмените, она продолжит действовать до конца оплаченного периода. Неиспользованные минуты не сгорают: они переходят во флекс-минуты, у которых нет срока действия. Флекс-минуты можно и докупить, если минут подписки не хватило. До 31 октября 2026 года новые пользователи получают скидку 30% на Персональный и Профессиональный тарифы и 50% на первую оплату Ультры. Актуальные цены есть на странице загрузки.
Минуты подписки можно тратить не только в Veai CLI. Ключ из личного кабинета подключается к Claude Code, OpenCode, Cursor, Cline и другим инструментам. Адрес шлюза один для всех: https://api.veai.ru/openai/api. Инструкции для каждого инструмента лежат в документации.
Со своим API-ключом OpenAI, Anthropic, Gemini или DeepSeek, а также с локальной Ollama Veai CLI работает бесплатно и без аккаунта Veai. Подключение своего шлюза через /custom-provider тоже бесплатно. Для компаний есть Enterprise-вариант с VPC или self-hosting, SSO и своими лимитами.
Как попробовать
Сначала зарегистрируйтесь на app.veai.ru. Пробный период длится 30 дней, в него входят 200 минут, карта не нужна. Если вы будете работать только со своим ключом, этот шаг можно пропустить.
Veai CLI работает на Windows x64, macOS (Intel и Apple Silicon) и Linux x64 с glibc.
Windows, PowerShell:
irm https://veai.ru/cli/install.ps1 | iex
macOS и Linux:
curl --proto '=https' --tlsv1.2 -fsSL https://veai.ru/cli/install.sh | sh
Если не хотите запускать скрипт вслепую, откройте его по той же ссылке и прочитайте.
Затем запустите veai, выполните /login, выберите вход через аккаунт Veai и модель командой /model.
Это первая публичная версия, и мы наверняка что-то не учли. Если агент ведёт себя странно, расскажите в комментариях. Особенно интересны случаи, когда субагент потерял контекст, команда обошла разрешения или фоновая задача потерялась.
JB-AI
Было бы удобно если бы модели знали про возможности моделей используемых в veai, чтобы модели сами могли подсказать какую лучше выбрать, да и в целом чтобы они знали про документациюЯ такое делал через отдельный скилл с директорией в которой лежит документация, модель сама понимала когда подгружать документацию в чат, либо какой-то ваш внутренний RAG использовать