Разделы базы знаний ▾
Навигация
▸ Начните здесь По ролямКатегории
- Cursor + Gonka AI — дешёвый LLM для кодинга
- Claude Code + Gonka AI — LLM для терминала
- OpenClaw + Gonka AI — доступные AI-агенты
- OpenCode: своя модель в терминале
- Continue.dev + Gonka AI — AI для VS Code/JetBrains
- Cline + Gonka AI — AI-агент в VS Code
- Aider + Gonka AI — парное программирование с AI
- LangChain + Gonka AI — AI-приложения за копейки
- n8n + Gonka AI — автоматизация с дешёвым AI
- Open WebUI + Gonka AI — свой ChatGPT
- LibreChat + Gonka AI — open-source ChatGPT
- Hermes Agent + DeepSeek в сети Gonka — автономный агент за копейки
- Kilo Code + Gonka AI — AI-агент в VS Code
- Roo Code + Gonka AI — автономный AI-агент в VS Code
- LlamaIndex + Gonka AI — RAG-приложения за копейки
- PydanticAI + Gonka — типизированные AI-агенты за копейки
- Vercel AI SDK + Gonka AI — AI-приложения на TypeScript за копейки
- TanStack AI + Gonka — AI-приложения на TypeScript за копейки
- API быстрый старт — curl, Python, TypeScript
- JoinGonka Gateway — полный обзор
- Management Keys — SaaS на Gonka
- Самый дешёвый AI API: сравнение провайдеров 2026
- Как купить токены AI и API-ключ: 3 способа в 2026
- Лимит запросов Cursor Pro исчерпан — разбор и дешёвая альтернатива
- Claude Code дешевле — разбор счёта и переключение
- Cline сжигает деньги — почему агент тратит так много
- OpenClaw дорого обходится — почему агент жжёт токены и как сэкономить
- OpenRouter: дешёвая альтернатива — сравнение с JoinGonka Gateway
- Лучшая AI-модель для кодинга в 2026: сравнение и цены
- Дешёвая альтернатива GitHub Copilot без лимитов
- Дешёвая альтернатива Windsurf без кредитов и лимитов
- Самый дешёвый API для AI-агентов в 2026
- ZCode: дешёвый GLM-инференс вместо GLM Coding Plan
- JetBrains IDE + JoinGonka Gateway — свой endpoint вместо кредитов
- GitHub Copilot BYOK — свои модели вместо квоты
- Zed + JoinGonka Gateway — дешёвый инференс в редакторе
- Pi + JoinGonka Gateway — терминальный агент на дешёвом инференсе
- Codex CLI: свой ключ вместо подписки
- DeepSeek Harness: свой провайдер через JoinGonka Gateway
- MiniMax Code: агент MiniMax на своём ключе через Gonka
- Warp + JoinGonka Gateway — агент терминала на своём endpoint
- Trae + JoinGonka Gateway — модели сети Gonka в AI-IDE
- Cherry Studio + JoinGonka Gateway — настольный AI-клиент
- omp (Oh My Pi) + JoinGonka Gateway: агент с ролями моделей
- OpenHands + JoinGonka Gateway: агент на своём endpoint
- Qwen Code после закрытия qwen-oauth: работа через JoinGonka Gateway
- Goose + JoinGonka Gateway: свой провайдер и ключ в keyring
- Crush + JoinGonka Gateway: агент Charm на моделях сети Gonka
- Zoo Code + JoinGonka Gateway: переезд с Roo Code на модели Gonka
- Kimi Code CLI: агент Moonshot AI на своём ключе через Gonka
- Factory Droid + JoinGonka Gateway: BYOK на моделях сети Gonka
- MiMo Code + JoinGonka Gateway: агент Xiaomi на моделях сети Gonka
Инструменты
Crush + JoinGonka Gateway: агент Charm на моделях сети Gonka
Crush — терминальный coding-агент от Charm, команды, на чьих библиотеках для консольных интерфейсов построены десятки тысяч программ. Он читает и правит файлы проекта, запускает команды, берёт контекст у языковых серверов (LSP), подключает внешние инструменты через MCP и умеет сменить модель посреди сессии, не теряя контекста. Работает в терминалах macOS, Linux и Windows, а также на Android и BSD; лицензия — FSL-1.1-MIT. Родословная у проекта заметная: архивный репозиторий opencode-ai/opencode прямо отсылает к Crush — проект продолжили его первый автор и команда Charm.
Сторонних провайдеров Crush принимает двух видов — с OpenAI- и с Anthropic-совместимым API. JoinGonka Gateway подключается как openai-compat: одной командой установщика или десятком строк конфига. После этого агент работает на моделях децентрализованной сети Gonka — DeepSeek V4 Flash, GLM-5.3 Flash и MiniMax M2.7 — по единой цене: $0.0069 за миллион входных токенов.
Две особенности Crush стоит знать до первой сессии: модели он раскладывает по двум слотам, large и small, а модель, выбранную в интерфейсе, хранит в отдельном файле состояния, который главнее конфига. Им посвящён отдельный раздел. Команды и сообщения ниже сверены живым прогоном Crush 0.96.1 через шлюз 23 сентября 2026. После подтверждения адреса на счёт придут 3M бесплатных токенов — их хватит, чтобы повторить всё это самому.
Быстрый старт: установка и одна команда
Шаг 1: поставить Crush. Официальные способы из README проекта:
# Homebrew
brew install charmbracelet/tap/crush
# npm
npm install -g @charmland/crush
# Arch Linux
yay -S crush-bin
# Windows
winget install charmbracelet.crush
# Go
go install github.com/charmbracelet/crush@latestТам же описаны репозитории пакетов для Debian, Ubuntu, Fedora и RHEL, Nix и Scoop, а на странице релизов лежат готовые бинарники. Проверка — crush --version, в ответ придёт строка вида crush version v0.96.1.
Шаг 2: получить ключ. Зарегистрируйтесь на gate.joingonka.ai/register, подтвердите адрес и создайте ключ с префиксом jg- в разделе «API-ключи». Один ключ и один баланс действуют для всех моделей сети.
Шаг 3: запустить установщик.
npx @joingonka/setup --tool crushУстановщик спросит ключ — в аргументах командной строки он не передаётся, чтобы не осесть в истории оболочки, — и сделает четыре вещи:
- пропишет провайдера
joingonkaв~/.config/crush/crush.json: типopenai-compat, адрес шлюза, ключ литералом и три модели сети с окнами контекста, потолками ответа и ценами за миллион токенов, которые он в момент установки берёт у шлюза живыми, — по ним Crush считает стоимость сессии. Файл получит права600; - назначит модели: в слот large — DeepSeek V4 Flash, в small — MiniMax M2.7, а GLM-5.3 Flash останется в списке для ручного выбора. Делает он это, только если слот large пуст или указывает на нашу модель, ушедшую из сети; чужой выбор остаётся, а в выводе будет подсказка, как переключиться;
- проверит, что выбор подействует: модель из интерфейса Crush держит в файле состояния, и тот перекрывает конфиг, — об этом раздел про large и small;
- сделает резервную копию, остальные провайдеры и настройки оставит как были и закончит живым запросом к шлюзу, чтобы сразу проверить ключ, адрес и модель.
Другую модель задаёт флаг --model с сокращением deepseek, glm или minimax; явно указанная модель записывается всегда. Нестандартные каталоги установщик учитывает так же, как сам Crush: CRUSH_GLOBAL_CONFIG для конфига, CRUSH_GLOBAL_DATA для файла состояния, а также XDG_CONFIG_HOME и XDG_DATA_HOME. Для серверов и скриптов есть режим без вопросов, ключ в нём берётся из переменной окружения:
JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool crush --model glm --non-interactiveОсновным форматом Crush теперь стал crushrc, но установщик пишет crush.json: его понимают все версии. Если crushrc у вас уже есть, Crush сольёт оба файла, при совпадении ключей победит crushrc, а сам его установщик не трогает.
Ручная настройка: crush.json или crushrc
Всё, что делает установщик, можно написать руками. Вот рабочий ~/.config/crush/crush.json — этот файл мы прогнали через шлюз:
{
"$schema": "https://charm.land/crush.json",
"providers": {
"joingonka": {
"name": "JoinGonka (Gonka)",
"type": "openai-compat",
"base_url": "https://gate.joingonka.ai/v1",
"api_key": "jg-your-key",
"models": [
{ "id": "deepseek-ai/DeepSeek-V4-Flash-0731", "name": "DeepSeek V4 Flash (Gonka)",
"context_window": 380000, "default_max_tokens": 32768,
"can_reason": true, "supports_attachments": false },
{ "id": "MiniMaxAI/MiniMax-M2.7", "name": "MiniMax M2.7 (Gonka)",
"context_window": 200000, "default_max_tokens": 8192,
"can_reason": false, "supports_attachments": false },
{ "id": "zai-org/GLM-5.3-Flash", "name": "GLM-5.3 Flash (Gonka)",
"context_window": 390000, "default_max_tokens": 8192,
"can_reason": true, "supports_attachments": false }
]
}
},
"models": {
"large": { "provider": "joingonka", "model": "deepseek-ai/DeepSeek-V4-Flash-0731" },
"small": { "provider": "joingonka", "model": "MiniMaxAI/MiniMax-M2.7" }
}
}| Поле | Значение | Что важно |
|---|---|---|
type | openai-compat | Тип для сторонних сервисов с OpenAI-совместимым API. Тип openai документация Crush оставляет для запросов через саму OpenAI |
base_url | https://gate.joingonka.ai/v1 | С /v1 на конце: путь /chat/completions Crush дописывает сам |
api_key | ваш ключ jg-… | Crush прогоняет значение через подстановку оболочки, поэтому вместо ключа можно написать $JOINGONKA_API_KEY — тогда переменная должна быть экспортирована там, откуда запускается Crush |
context_window | окно модели | По нему Crush показывает заполненность контекста и решает, когда сжимать историю |
default_max_tokens | потолок ответа | Уходит в каждый запрос как max_tokens. У рассуждающих моделей в этот бюджет входит и рассуждение |
Crush принимает только строгий JSON: комментарий или висячая запятая — и он не стартует. Поля цены (cost_per_1m_in, cost_per_1m_out и два поля для кеша) нужны лишь счётчику стоимости: установщик вписывает туда живую цену шлюза, а без них Crush работает и показывает ноль — только редактор со схемой из $schema подсветит их как обязательные.
Тот же провайдер в формате crushrc — это обычный Bash со встроенными командами Crush. Файл ~/.config/crush/crushrc:
provider add joingonka \
--name "JoinGonka (Gonka)" \
--type openai-compat \
--base-url "https://gate.joingonka.ai/v1" \
--api-key "${JOINGONKA_API_KEY:?set JOINGONKA_API_KEY}"
model add joingonka/deepseek-ai/DeepSeek-V4-Flash-0731 \
--name "DeepSeek V4 Flash (Gonka)" \
--context-window 380000 --default-max-tokens 32768 --can-reason true
model add joingonka/MiniMaxAI/MiniMax-M2.7 \
--name "MiniMax M2.7 (Gonka)" \
--context-window 200000 --default-max-tokens 8192
model add joingonka/zai-org/GLM-5.3-Flash \
--name "GLM-5.3 Flash (Gonka)" \
--context-window 390000 --default-max-tokens 8192 --can-reason true
model large joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
model small joingonka/MiniMaxAI/MiniMax-M2.7Модель здесь называется в форме provider/model-id: до первой косой черты — имя провайдера, дальше — идентификатор сети как есть. Форма ${JOINGONKA_API_KEY:?…} держит ключ вне файла, но без экспортированной переменной Crush не стартует — лучше ошибка на старте, чем запросы с пустым ключом.
Модели large и small и файл состояния
Модель в Crush выбирается не одна на всё, а для двух слотов:
| Слот | Что на нём выполняется | Что ставит установщик | Как сменить |
|---|---|---|---|
large | Основной агент: все ходы с чтением и правкой файлов и командами | DeepSeek V4 Flash: окно 380K и самый большой в сети потолок ответа, 32768 | ctrl+l в интерфейсе, -m у crush run, models.large в конфиге |
small | Вспомогательные задачи: название сессии и под-агент, который ищет в сети и читает веб-страницы. Если малая модель не справилась с названием, Crush повторяет запрос большой | MiniMax M2.7: у неё больше всего ёмкости в сети | --small-model у crush run, models.small в конфиге, model small в crushrc |
Третью модель сети, рассуждающую GLM-5.3 Flash, выбирают для запутанной логики, помня, что потолок ответа у неё 8192 и часть его уходит на рассуждение, — подробности в обзоре модели. На один запуск модель задаётся полным именем: crush run -m joingonka/zai-org/GLM-5.3-Flash "…". Все доступные имена печатает crush models joingonka.
Файл состояния. Модель, выбранную в интерфейсе по ctrl+l, Crush записывает не в crush.json, а в машинный файл состояния: ~/.local/share/crush/crush.json, в Windows — %LOCALAPPDATA%\crush\crush.json. Этот файл главнее и пользовательского конфига, и crushrc: Crush читает их по порядку /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → файл состояния, и каждый следующий перекрывает предыдущий. Выше стоят только настройки проекта — crush.json или crushrc в его каталоге. Где лежат файлы на вашей машине, покажет crush dirs.
В нашем прогоне мы открыли выбор моделей — провайдер «JoinGonka (Gonka)» стоит там с отметкой «✓ Configured» — и выбрали MiniMax M2.7. Crush ответил «Large model changed to MiniMax M2.7 (Gonka)» и записал в файл состояния:
{"models":{"large":{"model":"MiniMaxAI/MiniMax-M2.7","provider":"joingonka","max_tokens":8192}}, …}Теперь эта модель главнее того, что написано в crush.json. Установщик такую ситуацию распознаёт и ведёт себя по-разному:
- без
--modelфайл состояния он не трогает — это ваш рабочий выбор, — но прямо предупреждает, с какой моделью Crush на самом деле откроется:Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731. Так же он поступит, если в интерфейсе выбрана GLM-5.3 Flash или модель другого провайдера; - с явным
--modelон правит в файле состояния ровно одну запись —models.large, — предварительно сохранив копию, и пишет, что было и что стало. Иначе флаг молча не подействовал бы. После такого запуска Crush в нашем прогоне открылся на модели, указанной во флаге.
Проверка: что должно произойти
Сначала убедитесь, что Crush видит провайдера:
crush models joingonkaВ ответ — три строки:
joingonka/MiniMaxAI/MiniMax-M2.7
joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
joingonka/zai-org/GLM-5.3-FlashЗатем — разовый прогон без интерфейса. Положите в каталог проекта файл с очевидной ошибкой и попросите её найти:
crush run -q "Read calc.py and tell me in one sentence whether it has a bug."Агент должен сам вызвать инструмент чтения файла и ответить по существу, с номером строки. В нашем прогоне ошибку нашли все три модели сети, на задачу уходило 20-40 секунд. Флаг -q прячет индикатор ожидания. В режиме crush run все вызовы инструментов одобряются автоматически, поэтому запускайте его в своём проекте. В обычном интерфейсе (команда crush) активная модель видна в строке состояния: ◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka). Сессии и журнал Crush хранит в каталоге .crush проекта, закрытом от git собственным .gitignore; журнал печатает crush logs. Со стороны шлюза запрос виден в кабинете: раздел «Использование», разбивка «По моделям» и «По ключам».
Если что-то пошло не так, диагноз обычно читается прямо из сообщения:
| Что видно | Что это значит | Что сделать |
|---|---|---|
unauthorized: Invalid API key. | Шлюз не принял ключ | Проверьте api_key: ключ целиком, без пробелов. Если там ссылка на переменную, она должна быть экспортирована в этой оболочке |
invalid JSON in config file …/crush.json | В файле комментарий, висячая запятая или опечатка | Crush принимает только строгий JSON: исправьте файл. Установщик комментарии сам не вычищает, но предупреждает о них, а файл, который совсем не разбирается, не трогает и называет причину |
failed to load shell config …/crushrc: … exit status 1 | Ошибка в crushrc, чаще всего не задана переменная с ключом в форме ${…:?} | Экспортируйте переменную перед запуском или исправьте строку, на которой скрипт падает |
Failed to override models: large model "…" not found | Опечатка в имени модели у флага -m | Скопируйте имя из вывода crush models joingonka |
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit) | У модели в час пик закончилась свободная ёмкость в сети | Crush сам повторяет запрос с растущими паузами — в нашем прогоне около минуты — и только потом сдаётся. Переключитесь на другую модель через ctrl+l или -m либо подождите; состояние видно на странице статуса |
| Crush открылся не на той модели, о которой сообщил установщик | Выбор из интерфейса лежит в файле состояния и перекрывает конфиг | Выберите модель через ctrl+l или повторите установку с --model |
402 | На балансе закончились средства | Пополните счёт в разделе «Биллинг»; ключ при этом рабочий |
Сколько это стоит
Агент тратит токены иначе, чем чат: к каждой вашей фразе Crush добавляет системный промпт и описания своих инструментов, а задача обычно занимает несколько ходов. В нашем прогоне каждый запрос к модели нёс около 11,5 тысячи входных токенов, а задача «прочитать файл и найти ошибку» заняла два-три запроса и 23-35 тысяч токенов, почти всё — вход. Поэтому цена за токен здесь решает.
Через JoinGonka Gateway токены стоят $0.0069 за миллион на входе и $0.021 за миллион на выходе — цена одинакова для всех моделей сети и подставляется на этой странице из живого источника.
| Сценарий | Расход | Через Gateway |
|---|---|---|
| Разовая задача: прочитать файл, найти ошибку | 23-35K токенов | сотые доли цента |
| День активной работы | 3-7M токенов | несколько центов |
| Месяц активной разработки | ~150M токенов | около доллара |
Оценки в правой колонке — по ценам на сентябрь 2026. Для сравнения — как вообще можно платить за модели в Crush:
| Способ | Модель оплаты | Что ограничивает |
|---|---|---|
| Hyper — официальный провайдер Charm | подписка, есть бесплатный уровень | условия тарифа на стороне Charm |
| Ключ вендора напрямую | за токены по прайсу вендора | счёт растёт вместе с длиной сессий; цена зависит от модели |
| JoinGonka Gateway | за токены, предоплаченный баланс | расход виден в кабинете; подписки и месячных квот нет |
Счётчик стоимости в интерфейсе Crush считает по полям цены из конфига. Туда попадает цена шлюза на момент установки, а долларовая цена в сети плавает вместе с курсом GNK, поэтому счётчик — ориентир. Точный расход и остаток — в кабинете, в разделах «Использование» и «Биллинг». Почему в слот large по умолчанию встаёт DeepSeek V4 Flash, подробно разобрано в обзоре модели.
Что учесть в работе
Разрешения. В интерфейсе Crush по умолчанию спрашивает разрешение перед вызовом инструмента. Флаг --yolo отключает все вопросы разом, а точечно доверенные инструменты перечисляются в конфиге:
# crushrc
permissions allow view ls grep
# crush.json
"permissions": { "allowed_tools": ["view", "ls", "grep"] }Напомним, что crush run одобряет всё сам. Это свойство Crush, от провайдера модели оно не зависит.
Таймаут запроса. Crush обрывает запрос, если от модели долго не приходит ни одного фрагмента ответа: в версии 0.96.1 это две минуты тишины (документация называет 60 секунд, но в коде и на нашей проверке — две минуты). Служебные пинги, которыми шлюз держит соединение, этот счётчик не сбрасывают — мы проверили на локальном стенде. Шлюз же в часы нагрузки ждёт первого токена от сети до 150 секунд, поэтому запас стоит поднять:
# crushrc
option request-timeout 300
# crush.json
"options": { "request_timeout": 300 }Подписи в коммитах. Коммиты и пул-реквесты, которые создаёт Crush, по умолчанию получают строку Assisted-by: Crush:<model> и приписку «Generated with Crush». Если это не нужно:
# crushrc
option attribution-trailer-style none
option attribution-generated-with false
# crush.json
"options": { "attribution": { "trailer_style": "none", "generated_with": false } }Метрики. Crush отправляет разработчикам псевдонимную статистику использования — только метаданные, без промптов и ответов. Отключается переменной CRUSH_DISABLE_METRICS=1 или DO_NOT_TRACK=1. Шлюз, со своей стороны, не хранит содержимое промптов и ответов — в статистике остаются только агрегаты расхода.
Конфиг — это код. И crushrc, и crush.json Crush исполняет с правами вашей оболочки: $(…) в поле ключа запустится при загрузке, а проектный crushrc сработает, как только вы откроете Crush в этом каталоге. Не запускайте агент в чужом репозитории, не прочитав его конфиги.
npx @joingonka/setup --tool crush — или блоком providers.joingonka в ~/.config/crush/crush.json: тип openai-compat, адрес https://gate.joingonka.ai/v1, ключ jg-…, модели с честными context_window и default_max_tokens. То же пишется несколькими строками provider add и model add в crushrc. Слот large отдают DeepSeek V4 Flash, small — MiniMax M2.7, GLM-5.3 Flash — для запутанной логики. Главная ловушка — файл состояния: модель, выбранная по ctrl+l, главнее конфига, поэтому установщик с явным --model правит и его. Проверка — crush models joingonka и crush run; таймаут запроса стоит поднять до 300 секунд.Хотите узнать больше?
Изучите другие разделы или начните зарабатывать GNK прямо сейчас.
Получить ключ и бесплатные токены →