Разделы базы знаний ▾

Навигация

▸ Начните здесь По ролям

Категории

Инструменты 52
Глоссарий 12

Инструменты

Goose + JoinGonka Gateway: свой провайдер и ключ в keyring

Goose — открытый расширяемый AI-агент, который работает на вашей машине: настольное приложение для macOS, Linux и Windows, CLI для терминала и API для встраивания. Он читает и правит файлы, запускает команды, подключает внешние сервисы через MCP-расширения. Написан на Rust, распространяется под лицензией Apache 2.0. Проект вырос в компании Block, а теперь входит в Agentic AI Foundation при Linux Foundation; канонический репозиторий — github.com/aaif-goose/goose, старый адрес block/goose перенаправляет туда.

Своих провайдеров Goose описывает декларативно: JSON-файл в каталоге custom_providers — и в списке появляется ещё один источник моделей. JoinGonka Gateway говорит на OpenAI Chat Completions, поэтому подключается одной командой установщика или одним файлом. После этого агент работает на моделях децентрализованной сети Gonka — DeepSeek V4 Flash, GLM-5.3 Flash и MiniMax M2.7 — по единой цене: $0.0069 за миллион входных токенов.

Одну особенность Goose лучше знать заранее: ключи провайдеров он держит не в конфиге, а в системном хранилище секретов. От того, есть ли такое хранилище на вашей машине, зависит, останется ли после установщика один ручной шаг, — ему посвящён отдельный раздел. Команды и сообщения ниже сверены живым прогоном goose 1.51.0 через шлюз 23 сентября 2026. После подтверждения адреса на счёт придут 3M бесплатных токенов — их хватит, чтобы повторить всё это самому.

Быстрый старт: установка и одна команда

Шаг 1: поставить Goose. Официальные способы для CLI из документации проекта:

# macOS and Linux: the script puts the binary in ~/.local/bin
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | CONFIGURE=false bash

# macOS, Homebrew
brew install block-goose-cli

Переменная CONFIGURE=false отключает мастер goose configure, который скрипт иначе запускает сразу после установки: провайдера настроит установщик. Если каталога ~/.local/bin нет в PATH, скрипт так и скажет. Для Windows в том же репозитории есть скрипт download_cli.ps1, а настольное приложение скачивается со страницы документации; оно и CLI читают одни и те же настройки, поэтому всё ниже действует для обоих. Проверка — goose --version.

Шаг 2: получить ключ. Зарегистрируйтесь на gate.joingonka.ai/register, подтвердите адрес и создайте ключ с префиксом jg- в разделе «API-ключи». Один ключ и один баланс действуют для всех моделей сети.

Шаг 3: запустить установщик.

npx @joingonka/setup --tool goose

Установщик спросит ключ — в аргументах командной строки он не передаётся, чтобы не осесть в истории оболочки, — и сделает следующее:

  • создаст файл провайдера custom_providers/custom_joingonka.json с адресом шлюза и тремя моделями сети с настоящими окнами контекста, с правами 600. Имена custom_joingonka и CUSTOM_JOINGONKA_API_KEY — те же, что Goose сам выводит из названия «JoinGonka», поэтому ключ из мастера ляжет куда нужно;
  • сделает JoinGonka провайдером по умолчанию с моделью DeepSeek V4 Flash — но только если провайдер ещё не выбран или выбран наш с пустой либо ушедшей из сети моделью. Чужой выбор он не трогает, а печатает команду, чтобы попробовать: goose session --provider custom_joingonka --model …;
  • положит ключ в secrets.yaml, только если хранилище секретов у Goose заведомо файловое; иначе прямо скажет, что остался один шаг, — подробности в разделе про ключ;
  • сделает резервные копии изменённых файлов и в конце отправит живой запрос на шлюз, чтобы сразу проверить ключ, адрес и модель.

Каталог настроек установщик находит так же, как сам Goose: ~/.config/goose на Linux и macOS, %APPDATA%\Block\goose\config на Windows, <root>/config при заданном GOOSE_PATH_ROOT. Другую модель задаёт флаг --model с сокращением deepseek, glm или minimax; явно указанная модель записывается всегда. Режим без вопросов берёт ключ из переменной окружения:

JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool goose --model glm --non-interactive

Ручная настройка: файл провайдера и config.yaml

Всё, что делает установщик, можно написать руками. Провайдер — отдельный JSON-файл ~/.config/goose/custom_providers/custom_joingonka.json; имя файла совпадает с полем name:

{
  "name": "custom_joingonka",
  "engine": "openai",
  "display_name": "JoinGonka",
  "description": "JoinGonka Gateway — Gonka AI inference (OpenAI-compatible)",
  "api_key_env": "CUSTOM_JOINGONKA_API_KEY",
  "base_url": "https://gate.joingonka.ai/v1/chat/completions",
  "models": [
    { "name": "deepseek-ai/DeepSeek-V4-Flash-0731", "context_limit": 380000 },
    { "name": "zai-org/GLM-5.3-Flash", "context_limit": 390000 },
    { "name": "MiniMaxAI/MiniMax-M2.7", "context_limit": 200000 }
  ],
  "supports_streaming": true,
  "requires_auth": true
}
ПолеЗначениеЧто важно
namecustom_joingonkaОн же имя файла и значение --provider
engineopenaiФормат OpenAI Chat Completions — основной путь шлюза. Кроме него Goose знает anthropic и ollama
api_key_envCUSTOM_JOINGONKA_API_KEYНе ключ, а имя секрета. Поля для самого значения в файле нет — где Goose его ищет, разобрано в следующем разделе
base_urlhttps://gate.joingonka.ai/v1/chat/completionsПолный адрес, как в примере документации Goose: такую форму понимают и старые сборки
modelsтри записи с context_limitБез context_limit Goose берёт окно из своего каталога моделей, а для незнакомой — 128 000 токенов, и сжимает историю, когда она заполнит 80% окна. У моделей сети окна от 200 000 до 390 000
supports_streaming, requires_authtrueОтвет приходит потоком, запросы требуют ключа. Поток не выключайте: без него и без потолка в запросе шлюз ограничит ответ коротким значением по умолчанию

Отдельного потолка ответа у записи модели Goose не предусмотрено. Для таких моделей он вообще не передаёт ограничение в запросе — мы проверили это по его журналу запросов, — и в потоковом режиме шлюз сам ограничивает ответ потолком модели: 32 768 токенов у DeepSeek V4 Flash, 8192 у GLM-5.3 Flash и MiniMax M2.7. Глобальную переменную GOOSE_MAX_TOKENS для этого задавать не нужно: она одна на все провайдеры сразу.

Файл провайдера Goose читает строгим JSON-разбором: комментарий или висячая запятая — и провайдер пропадает из списка. Создать его можно и мастером (goose configure → Custom Providers), но окно контекста мастер не спрашивает — его придётся дописать руками.

Провайдер и модель по умолчанию живут в ~/.config/goose/config.yaml. Так их записывает сам Goose:

active_provider: custom_joingonka
providers:
  custom_joingonka:
    enabled: true
    model: deepseek-ai/DeepSeek-V4-Flash-0731
    configured: true

Старая раскладка — плоские ключи GOOSE_PROVIDER и GOOSE_MODEL в корне файла — тоже работает: Goose читает её и сам переводит в новую при первом сохранении настроек, как у нас после goose configure. Установщик на пустом файле пишет именно плоские ключи — их понимает любая версия. Одноимённые переменные окружения важнее файла: если они заданы в оболочке, выбор из config.yaml не подействует, и установщик об этом предупредит.

Где живёт ключ: keyring, secrets.yaml или переменная окружения

В файле провайдера у Goose есть только имя секрета — CUSTOM_JOINGONKA_API_KEY. Значение он ищет по порядку: в переменной окружения с этим именем, затем в системном хранилище секретов (keyring, в macOS — Keychain), затем в файле secrets.yaml рядом с конфигом. В файл секреты попадают, когда хранилище у Goose файловое, и лежат там открытым текстом, с правами 600. А в config.yaml Goose ключи не ищет вовсе (документация).

Файловым хранилище становится, если keyring выключен — переменной GOOSE_DISABLE_KEYRING с любым значением или строкой GOOSE_DISABLE_KEYRING: true в config.yaml, — либо недоступен: сервер без графической сессии, контейнер, CI. Во втором случае Goose пишет в журнал «Keyring unavailable. Using file storage for secrets.» и сам переходит на файл — ровно это мы видели в контейнере. Писать в keyring установщик не умеет, а выключать его за вас не станет: Goose перестал бы видеть секреты, которые там уже лежат. Отсюда сценарии:

СитуацияЧто сделает установщикЧто останется вам
Рабочий стол с keyring: macOS, Windows, Linux с графической сессиейПропишет провайдера и модель, ключ не запишет и скажет «ONE STEP LEFT»Один раз сохранить ключ мастером
Сервер или контейнер без keyring, secrets.yaml ещё нетТо же: по косвенным признакам файловое хранилище не угадатьПройти мастер — Goose сам положит ключ в secrets.yaml, дальше установщик будет обновлять его там
Задан GOOSE_DISABLE_KEYRING или secrets.yaml уже естьЗапишет ключ в secrets.yaml с правами 600, чужие секреты сохранитНичего
Ключ провайдеру выдаёт команда (поле auth)Ключ не запишет: у Goose auth и api_key_env взаимоисключающиеНичего

Оставшийся шаг. Запустите goose configure и ответьте на вопросы мастера — так они выглядели в нашем прогоне:

  • What would you like to configure? → Configure Providers;
  • Which model provider should we use? → JoinGonka (у нас он стоял первым);
  • Would you like to set CUSTOM_JOINGONKA_API_KEY? (optional) → Yes, затем на Enter value for CUSTOM_JOINGONKA_API_KEY вставьте ключ — вместо символов появятся квадратики. Ключ сохраняется сразу;
  • Would you like to configure advanced settings? → No;
  • Select a model — список Goose получает у шлюза: MiniMaxAI/MiniMax-M2.7, deepseek-ai/DeepSeek-V4-Flash-0731, zai-org/GLM-5.3-Flash. Курсор стоит на первой строке — чтобы оставить модель, выбранную установщиком, выберите стрелками DeepSeek V4 Flash. После проверочного запроса мастер закончит строкой «Configuration saved successfully».

В Goose Desktop путь такой: Settings → Models → Configure providers → JoinGonka → ключ → Submit. Не хочется вставлять ключ руками — положите его в переменную и запустите мастер из той же оболочки: Goose напишет «CUSTOM_JOINGONKA_API_KEY is set via environment variable» и предложит сохранить значение:

read -s CUSTOM_JOINGONKA_API_KEY && export CUSTOM_JOINGONKA_API_KEY
goose configure

А на один запуск ключ можно передать вовсе без сохранения: CUSTOM_JOINGONKA_API_KEY=jg-your-key goose session, в PowerShell — $env:CUSTOM_JOINGONKA_API_KEY = "jg-your-key"; goose session. Переменная окружения важнее сохранённого значения, но живёт только до закрытия оболочки.

Проверка: что должно произойти

Сначала посмотрите, какие настройки Goose видит на самом деле:

goose info -v

В блоке «goose Configuration» должны быть строки GOOSE_PROVIDER: custom_joingonka и GOOSE_MODEL с идентификатором модели. Затем — разовый прогон без интерактивной сессии: положите в пустой каталог файл с очевидной ошибкой и попросите её найти.

goose run --no-session -t "Read calc.py and tell me in one sentence whether it has a bug."

Флаг --no-session не сохраняет прогон в историю. В шапке появится строка вида ● new session · custom_joingonka deepseek-ai/DeepSeek-V4-Flash-0731, затем вызов инструмента — ▸ shell с командой cat calc.py — и ответ с найденной ошибкой. Другую модель на один запуск задаёт --model: zai-org/GLM-5.3-Flash или MiniMaxAI/MiniMax-M2.7. В нашем прогоне 23 сентября 2026 цикл «запрос → инструмент → результат → ответ» прошли все три модели сети. Рассуждения моделей CLI Goose по умолчанию скрывает — показать их можно переменной GOOSE_CLI_SHOW_THINKING=1, если вывод идёт в терминал. Со стороны шлюза запрос виден в кабинете: раздел «Использование», разбивка «По моделям» и «По ключам».

Если что-то пошло не так, диагноз обычно читается прямо из сообщения:

Что видноЧто это значитЧто сделать
Error missing required key CUSTOM_JOINGONKA_API_KEY: Configuration value not foundGoose не нашёл ключ ни в окружении, ни в хранилище секретовСохраните ключ мастером. Если ключ лежит в secrets.yaml, а ошибка остаётся, секреты Goose теперь держит в keyring — сохраните ключ мастером ещё раз
Authentication failed … Status: 401 Unauthorized. Response: Invalid API key.Шлюз не принял ключСохраните ключ заново — целиком, без пробелов. Помните, что переменная CUSTOM_JOINGONKA_API_KEY в окружении важнее сохранённого значения
Error Unknown provider: custom_joingonkaФайл провайдера не прочитался: комментарий, висячая запятая или опечатка в JSONИсправьте файл либо удалите его и запустите установщик заново: поверх битого файла установщик ничего не пишет, а только называет его
Bad request (400): Model "…" not found. Available: …Опечатка в имени моделиШлюз сам перечисляет доступные идентификаторы — скопируйте нужный
Rate limit exceeded: Model "…" is currently overloaded in the Gonka network (rate limit)У модели в час пик закончилась свободная ёмкость в сетиGoose сам повторяет запрос, но с короткими паузами. Смените модель — /model в сессии или --model на запуск — либо подождите минуту; состояние сети — на странице статуса
402На балансе закончились средстваПополните счёт в разделе «Биллинг»; ключ при этом рабочий

Сколько это стоит

Агент тратит токены иначе, чем чат. Уже в стандартной конфигурации Goose отправляет модели описания восемнадцати встроенных инструментов, и в нашем прогоне каждый ход нёс около 4,6 тысячи входных токенов ещё до вашего вопроса. Задача «прочитать файл и найти ошибку» заняла два-три хода и 10-15 тысяч токенов, почти всё — вход; ещё один короткий запрос Goose делает сам, чтобы придумать название сессии. Ненужные расширения выключаются в goose configure → Toggle Extensions — это самый простой способ сократить вход.

Через JoinGonka Gateway токены стоят $0.0069 за миллион на входе и $0.021 за миллион на выходе — цена одинакова для всех моделей сети и подставляется на этой странице из живого источника.

СценарийРасходЧерез Gateway
Разовая задача: прочитать файл, найти ошибку10-15K токеновсотые доли цента
День активной работы3-7M токеновнесколько центов
Месяц активной разработки~150M токеновоколо доллара

Оценки в правой колонке — по ценам на сентябрь 2026. Для сравнения — как вообще можно платить за модели в Goose:

СпособМодель оплатыЧто ограничивает
Подписка Claude, ChatGPT или Gemini через ACPфиксированная сумма в месяцквоты и окна обновления лимитов на стороне вендора
Ключ вендора напрямуюза токены по прайсу вендорасчёт растёт вместе с длиной сессий
JoinGonka Gatewayза токены, предоплаченный балансрасход виден в кабинете; подписки и месячных квот нет

Точный расход и остаток — в кабинете, в разделах «Использование» и «Биллинг». Почему по умолчанию стоит DeepSeek V4 Flash — с самым большим потолком ответа в сети, — подробно разобрано в обзоре модели.

Что учесть в работе

Режим подтверждений. По умолчанию Goose работает в режиме auto — полностью автономно: сам правит и удаляет файлы, запускает команды и пользуется расширениями, ни о чём не спрашивая. На своём проекте это удобно, на чужом коде режим лучше ужесточить:

# inside a session
/mode smart_approve

# permanently, as a line in config.yaml
GOOSE_MODE: smart_approve
РежимКак ведёт себя Goose
autoДействует без подтверждений — режим по умолчанию
smart_approveСам пропускает малорисковые действия, об остальных спрашивает
approveСпрашивает перед каждым вызовом инструмента
chatТолько разговаривает: ни инструментов, ни правок

Это свойство самого Goose, от провайдера модели оно не зависит.

Смена модели. Внутри сессии — команда /model с идентификатором, например /model zai-org/GLM-5.3-Flash; на один запуск — флаг --model у goose run и goose session; насовсем — goose configure или строка model в config.yaml. Провайдер при этом остаётся прежним. Рассуждающая GLM-5.3 Flash хороша для запутанной логики, но потолок её ответа — 8192 токена, и часть его уходит на рассуждение — подробности в обзоре модели.

Прогоны без присмотра. goose run подходит для скриптов и CI: флаг -q оставляет в выводе только ответ модели, --output-format json отдаёт результат для разбора. Ограничители --max-turns (сколько ходов агент делает без участия человека) и --max-tool-repetitions (сколько раз подряд можно вызвать один инструмент с теми же аргументами) страхуют от зацикливания.

Приватность. Анонимная статистика использования в Goose по умолчанию выключена (GOOSE_TELEMETRY_ENABLED). Шлюз не хранит содержимое промптов и ответов — в статистике остаются только агрегаты расхода.

Goose подключается к JoinGonka Gateway одной командой — npx @joingonka/setup --tool goose — или одним файлом: провайдер custom_joingonka в custom_providers (engine: openai, адрес https://gate.joingonka.ai/v1/chat/completions, модели с честными context_limit) плюс провайдер и модель по умолчанию в config.yaml. Ключ Goose держит не в конфиге, а в keyring или в secrets.yaml: на машине с keyring остаётся один шаг — goose configure → Configure Providers → JoinGonka → ключ, и на выборе модели стоит оставить DeepSeek V4 Flash. Проверка — goose run и раздел «Использование» в кабинете; цена у DeepSeek V4 Flash, GLM-5.3 Flash и MiniMax M2.7 одна, поэтому модель выбирается по поведению, а не по бюджету.

Хотите узнать больше?

Изучите другие разделы или начните зарабатывать GNK прямо сейчас.

Получить ключ и бесплатные токены →