Вайб-кодинг в zerostack: настройка Rust-агента через RouterAI (Claude, GLM, DeepSeek)
zerostack
zerostack — терминальный coding-агент с открытым исходным кодом на Rust (репозиторий gi-dellav/zerostack, лицензия GPL-3.0). Автор описывает его как минимальный агент, вдохновлённый pi и opencode: он читает и правит файлы, запускает команды, читает AGENTS.md и CLAUDE.md, работает в интерактивном TUI и в режиме ACP — как агент-бэкенд для редакторов, поддерживающих Agent Client Protocol (например, Zed).
Главная особенность — расход памяти. В README проекта указано: бинарник около 26 МБ, потребление RAM в среднем ~16 МБ с пиками до ~24 МБ, тогда как JS-агенты занимают сотни мегабайт. Это делает zerostack удобным для слабых машин, контейнеров и работы в нескольких параллельных сессиях.
RouterAI подключается как кастомный OpenAI-совместимый провайдер: в одном агенте доступны Claude, GLM и DeepSeek из каталога моделей, работа из России без VPN и оплата в рублях. Важная деталь: по умолчанию zerostack настроен на OpenRouter, поэтому провайдера нужно переопределить явно — об этом ниже.
Требования
- Linux или macOS. Windows в README помечен как непроверенный — запуск в WSL или контейнере надёжнее.
- Для установки из релизов ничего, кроме терминала, не нужно. Для
cargo install— свежий Rust (rustup). - API-ключ из личного кабинета.
- Для ACP-режима — редактор с поддержкой Agent Client Protocol (например, Zed).
Установка
Самый быстрый способ — скрипт из репозитория:
curl -fsSL https://raw.githubusercontent.com/gi-dellav/zerostack/main/install.sh | bash
zerostack --version
Либо готовый архив с GitHub Releases. Для x86_64 Linux берите zerostack-x86_64-unknown-linux-musl.tar.gz: сборка на glibc требует библиотеку 2.39 и на Debian 12 / Ubuntu 22.04 не запустится, а musl-сборка статическая и работает везде.
tar xzf zerostack-x86_64-unknown-linux-musl.tar.gz
install -m755 zerostack-x86_64-unknown-linux-musl /usr/local/bin/zerostack
zerostack --version
Через Cargo — с набором функций на выбор. По умолчанию собираются git-worktree, mcp, subagents, archmd, status-signals и logging; ACP, память, hooks, advisor и мультимодальный ввод включаются флагами:
cargo install zerostack # базовый набор
cargo install zerostack --features acp,memory,hooks,advisor
Есть также Homebrew (brew tap gi-dellav/tap && brew install zerostack) и Nix. Команда zerostack --version должна вывести версию — на момент написания это zerostack 1.8.5.
Подключение к RouterAI
Настройки zerostack читает из файла config.toml, config.yaml или config.json. Порядок поиска: $ZS_CONFIG_DIR, затем ~/.config/zerostack/, затем ~/.local/share/zerostack/. На практике удобнее всего ~/.config/zerostack/config.toml. Файл settings.json в zerostack — это конфигурация hooks, а не провайдеров; не путайте.
RouterAI подключается через секцию custom_providers: тип провайдера openai (Chat Completions, https://routerai.ru/api/v1), ключ — из переменной окружения, чтобы он не лежал в файле.
- Создайте каталог и файл конфигурации:
mkdir -p ~/.config/zerostack
# ~/.config/zerostack/config.toml
provider = "routerai"
model = "anthropic/claude-sonnet-5.5"
context_window = 1000000
enable-exa-mcp = false
[custom_providers.routerai]
provider_type = "openai"
base_url = "https://routerai.ru/api/v1"
api_key_env = "ROUTERAI_API_KEY"

- Положите ключ в переменную окружения — в
~/.bashrc,~/.zshrcили в файл, который подключаете перед запуском:
export ROUTERAI_API_KEY="sk-xxxxxxxxxxxxxxxx"
- Проверьте, что zerostack видит провайдера и модель:
zerostack --print-configпоказывает путь к загруженному файлу, провайдера, модель и лимиты контекста.

Поля секции custom_providers:
| Поле | Что задаёт |
|---|---|
provider_type |
Базовый тип транспорта: для RouterAI — openai
|
base_url |
Адрес API: https://routerai.ru/api/v1
|
api_key_env |
Имя переменной окружения с ключом |
api_style |
completions (по умолчанию при заданном base_url) или responses
|
model |
Модель по умолчанию для этого провайдера |
headers, timeout_secs
|
Дополнительные заголовки и таймаут запроса |
Помимо файла, провайдера можно указать флагами командной строки. Это удобно для разового запроса или для проверки:
zerostack --provider routerai --model deepseek/deepseek-v4.1-flash -p "Объясни, что делает invoices.js"
Флаги --provider и --model (а также переменные ZS_PROVIDER и ZS_MODEL) имеют приоритет над файлом конфигурации.
Почему важно явно задать провайдера
Провайдер по умолчанию в zerostack — OpenRouter, и если ключ RouterAI лежит в окружении, а провайдер не переопределён, агент всё равно попытается уйти в OpenRouter. Признак этого — ошибка при старте:
No API key found. Set the OPENROUTER_API_KEY environment variable, add it to
config.api_keys under 'openrouter' ...
Значит, секция custom_providers не загрузилась или provider не переключён. Если ключ OpenRouter у вас тоже есть в окружении, уберите его из сессии (unset OPENROUTER_API_KEY) — так ошибки конфигурации видны сразу, а не маскируются чужим ключом.
Как проверить, какой эндпоинт реально используется
Самый надёжный способ — включить отладочный вывод и посмотреть, к какому хосту идёт соединение:
zerostack -p --no-session --log-level debug "скажи OK" 2>&1 | grep -i routerai
В выводе будут строки вида starting new connection: routerai.ru и connecting to ... :443. Полный подробный лог с трассировкой запросов пишется в файл ~/.local/share/zerostack/logs/ при флаге -v; путь можно переопределить через --log-file.
Ещё два признака: команда /provider внутри агента показывает текущего провайдера, а заведомо неверный ключ при правильно заданном base_url даёт ответ 401 Unauthorized от RouterAI — это и подтверждает, куда уходит запрос.
ROUTERAI_API_KEY=sk-invalid zerostack -p --provider routerai --model z-ai/glm-5.3-flash "hi"
ACP-режим
ACP — протокол на JSON-RPC, по которому редактор запускает агента отдельным процессом и общается с ним. В README zerostack он назван Agent Communication Protocol, а в Zed — Agent Client Protocol; стороны совместимы, что проверяется уже на рукопожатии. С включённой функцией acp zerostack становится ACP-сервером, и редактор может открывать в нём треды.
# stdio: редактор запускает процесс сам
zerostack --acp
# TCP: слушает на порту (по умолчанию 7243)
zerostack --acp --acp-host 0.0.0.0 --acp-port 7243
В Zed добавьте агента через Agent Settings → External Agents → Add Agent → Add Custom Agent и укажите в настройках:
{
"agent_servers": {
"zerostack": {
"type": "custom",
"command": "zerostack",
"args": ["--acp"],
"env": {
"ROUTERAI_API_KEY": "sk-xxxxxxxxxxxxxxxx"
}
}
}
}
Режим stdio подходит для редакторов, которые запускают агента подпроцессом; TCP-вариант нужен, если редактор подключается к уже запущенному серверу.
Ответ на запрос initialize по stdio выглядит так:

Ключевой момент: ACP не заменяет настройку провайдера. Zed в треде внешнего агента не подставляет свои модели и ключи — провайдер, ключ и выбор модели остаются за zerostack. Поэтому перед подключением к редактору убедитесь, что custom_providers и provider = "routerai" работают в терминале: в ACP-режиме без настроенного провайдера агент просто не обработает запрос.
Выбор модели
Идентификаторы взяты из каталога RouterAI на момент написания; актуальные цены и список смотрите там же. Для агента важно уверенное вызывание инструментов (tool calling) — от него зависит, сможет ли модель править файлы и запускать команды.
| Модель | Контекст | Для чего |
|---|---|---|
anthropic/claude-sonnet-5.5 |
1M | Основная модель: фичи, отладка, рефакторинг среднего размера |
anthropic/claude-opus-5 |
1M | Сложные рефакторинги и архитектурные изменения |
anthropic/claude-haiku-5.5 |
1M | Быстрые мелкие задачи, массовые правки |
z-ai/glm-5.3-flash |
1M | Рутина: дешёвые правки, переименования, шаблонный код |
deepseek/deepseek-v4.1-flash |
1M | Рутина и длинные файлы: дешёвый ввод, контекст 1M |
openai/gpt-5.5 |
1M | Альтернатива Claude от OpenAI для тех же задач |
У zerostack есть механизм быстрых моделей (quick_models). Они задаются в том же config.toml и переключаются командой /models <имя>, флагом --quick-model или по Alt+M:
[quick_models.fast]
provider = "routerai"
model = "z-ai/glm-5.3-flash"
[quick_models.cheap]
provider = "routerai"
model = "deepseek/deepseek-v4.1-flash"
zerostack --quick-model=fast
Рабочая схема — держать Sonnet для сложных задач и переключаться на GLM Flash или DeepSeek Flash для рутины. Для разового запуска с другой моделью достаточно /model <id> или --model в командной строке.
Проверка подключения
Быстрая проверка без интерактивного интерфейса — один запрос флагом -p (--print):
zerostack -p --no-session "Ответь одним словом: OK"
Ответ OK означает, что конфигурация верна. Дальше проверьте агента в работе: запустите zerostack в папке проекта и дайте небольшую задачу — например, добавить функцию и тест к ней, а затем прогнать тесты.
На первом запуске в новом проекте zerostack спросит, создать ли ARCHITECTURE.md — файл с описанием архитектуры для агентов. Ответьте n, если не хотите добавлять его в репозиторий; отказ ни на что не влияет.

В строке статуса видно рабочую папку, модель, занятый контекст (~3k/1.0M) и активный prompt (code). Для примера ниже агент получил задачу добавить в демо-проект функцию pendingInvoices() и тест к ней.

В конце агент отвечает, что сделал: функция фильтрует счета со статусом pending, тест проверяет состав, статусы и что выборка не равна полному списку, npm test — 2 из 2. В строке статуса — израсходованные токены (⇡38k ⇣2k).

Решение проблем
No API key found. Set the OPENROUTER_API_KEY ...
Провайдер остался по умолчанию. Проверьте, что config.toml лежит в ~/.config/zerostack/, что в нём есть provider = "routerai" и секция [custom_providers.routerai], а переменная из api_key_env экспортирована в том же терминале. Быстрая диагностика — zerostack --print-config.
401 Unauthorized
Ключ не найден или неверен, но запрос уже уходит на RouterAI. Проверьте значение в переменной из api_key_env и что ключ скопирован из личного кабинета целиком. Если 401 приходит от другого сервиса — значит, base_url указывает не туда.
404 или «модель не найдена»
base_url должен быть https://routerai.ru/api/v1 — с /v1. Идентификатор модели пишется целиком, с префиксом производителя: anthropic/claude-sonnet-5.5, z-ai/glm-5.3-flash. Сверьтесь с каталогом.
402 Payment Required
Недостаточно средств на балансе — пополните его в разделе Биллинг.
Сборка из релиза не запускается: GLIBC_2.39 not found
Возьмите zerostack-x86_64-unknown-linux-musl.tar.gz вместо варианта с gnu в имени: он статический и не зависит от версии системной glibc.
В логах WARN про error sending request при старте
Повторяющиеся предупреждения в начале сессии относятся к служебному запросу списка моделей для автоопределения контекста. Если указать context_window в конфигурации явно (например, 1000000 для моделей из таблицы выше), автозапрос не нужен и предупреждения пропадают.
Ошибка подключения к mcp.exa.ai
В новой установке zerostack сам подключает MCP-сервер Exa для веб-поиска, и он может быть недоступен из вашей сети. На работу агента это не влияет; чтобы не видеть ошибку, добавьте в конфигурацию enable-exa-mcp = false.
zerostack, Cline, OpenCode и Aider: чем отличается
zerostack — молодой проект: репозиторий появился в мае 2026 года, на Hacker News его представили постом «Zerostack – A Unix-inspired coding agent written in pure Rust» — 575 баллов. Для сравнения, у OpenCode, Cline и Aider аудитория и экосистема заметно больше, и это честное ограничение: меньше готовых рецептов, меньше ответов на форумах, API может меняться между версиями.
Зато по расходу ресурсов он в другой категории. OpenCode и другие JS-агенты, по данным README zerostack, занимают ~300 МБ RAM с пиками до ~700 МБ против ~16–24 МБ у zerostack, а CPU в простое — ~2 % против 0 %. Если вы держите два-три агента одновременно или работаете на ноутбуке с 8 ГБ, разница заметна. Плюс zerostack не требует Node.js: это один бинарник, который запускается сразу.
По возможностям набор стандартный для 2026 года: правка файлов, bash, MCP, субагенты, сессии, режимы разрешений (readonly, guarded, standard, yolo), песочница через bubblewrap, system prompts для разных фаз работы (code, plan, review, debug). Cline — расширение VS Code, Aider — CLI-агент с фокусом на git-коммиты и историю правок; zerostack ближе к минималистичным TUI-агентам вроде Crush и Pi.
Что дальше
- Каталог моделей — подберите модель под задачу и посмотрите цены
- Аутентификация — управление API-ключами
- Вайб-кодинг в OpenCode и Вайб-кодинг в Aider — более зрелые CLI-агенты через RouterAI
- Вайб-кодинг в Codex и Вайб-кодинг в Crush — другие терминальные агенты
- Codewhale через RouterAI — ещё один Rust-агент с любым Base URL
- Документация zerostack — CONFIG.md, PROVIDERS.md, GET_STARTED.md