ESPNFrom superteam to 2-4 disappointment: Barnwell on what has gone wrong for the RamsPunchReject money requests from home, Obi tells UK-based NigeriansThe Jerusalem PostForeign journalists still cannot enter Gaza without military escort, Israel tells High CourtBollywood HungamaShanaya Kapoor's debut web show Student Of The Year: After Dark to premiere November 13 on JioHotstarInquirerQuezon Medical Center opens expanded, modern emergency roomESPN DeportesKoundé y Eric también se lesionanRTP DesportoEscocês dirige Sporting-LASK LinzZDF heuteEntdecken Sie das ZDF-NachrichtenstudioAnime News NetworkThe Apothecary Diaries Season 3 ‒ Episodes 49-51Daily MaverickBAIL BID: Did Suliman Carrim tailor his evidence? Magistrate wants transcripts before bail judgmentVanguardOne in four Nigerian girls out of school – UNICEFPolsat NewsTak rząd Francji może zdławić chaos na ulicach. Premier nie wyklucza stanu wyjątkowego
The Daily Newsstand · Free, Always
Monday, October 19, 2026

CLI-харнесс. Управление через телеграмм. Claude, GPT и Qwen в одном терминальном агенте, собранном на pi

Translate

Мы проверили, как агент правит файлы в 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-серверов, а мы тем временем спрашиваем, какие серверы ещё полезно подключить.

Вопрос через /btw, пока агент работает

Вопрос через /btw, пока агент работает

Режимы разрешений и выбор модели на одном колесе

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

Колесо по Shift+Tab: режим разрешений, уровень рассуждений и модель

Колесо по Shift+Tab: режим разрешений, уровень рассуждений и модель

Режимов разрешений четыре:

  • обычный спрашивает про опасные команды, которые распознаёт разбор, и про команды, которые разобрать не удалось. python -c, node -e и скрипты он выполняет без вопроса, для них есть параноидальный режим;

  • параноидальный спрашивает про любую команду, если не уверен, что она только читает;

  • без запросов (в интерфейсе YOLO) ничего не спрашивает;

  • “я отошёл” тоже ничего не спрашивает, а на вопросы агента отвечает, что вас нет, и агент продолжает работу до конца задачи. Опасные команды в этом режиме не блокируются, поэтому включайте его только там, где это допустимо.

Агент настраивает себя сам

Чтобы подключить MCP-сервер или написать правило, документацию читать не нужно. Достаточно написать в чат: “Подключи MCP-сервер context7”. Документация CLI поставляется вместе с ним, агент найдёт нужный раздел и сам поправит конфиг. После перезагрузки конфигурации сервер появляется на экране /mcp вместе со своими инструментами.

Агент сам подключает MCP-сервер context7 по просьбе в чате

Агент сам подключает MCP-сервер context7 по просьбе в чате

Управление из 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.

Это первая публичная версия, и мы наверняка что-то не учли. Если агент ведёт себя странно, расскажите в комментариях. Особенно интересны случаи, когда субагент потерял контекст, команда обошла разрешения или фоновая задача потерялась.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.