Розділи бази знань ▾

Навігація

▸ Почніть тут За ролями

Категорії

Інструменти 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 прямо зараз.

Отримати ключ та безкоштовні токени →