OpenCode и Kilo Code со своим API-ключом: как подключить шлюз
Данные на 26.10.2026, 10:20 МСК · цены в ₽ за 1M токенов
OpenCode и Kilo Code подключаются к любому OpenAI-совместимому шлюзу как custom provider: указываете base URL, ключ и id моделей. У AIShlyuz это base URL https://aishlyuz.ru/v1 и ключ sk-ais-…, а список моделей отдаёт GET /v1/models. В OpenCode провайдер описывают в opencode.json, в Kilo Code в Settings → Providers → Custom provider с типом OpenAI Compatible.
Ни OpenCode, ни Kilo Code не держат нас в своих списках провайдеров. Шлюз подключается как OpenAI-совместимый провайдер, по их документации. 26.10.2026 мы прогнали конфиги из этой статьи вживую в OpenCode 1.19.4 и Kilo Code CLI 7.8.17: стрим и вызов инструмента (запись файла) сработали на deepseek-v4-pro, claude-sonnet-5-5, glm-5-3 и kimi-k3.
Что нужно: харнесс, ключ шлюза и base URL
Чем OpenCode и Kilo Code отличаются от Claude Code
Оба open-source харнесса под MIT: OpenCode живёт в терминале и десктопе, Kilo Code в VS Code, JetBrains и CLI. Модель вы выбираете сами и меняете хоть на каждую задачу. Claude Code заточен под модели Anthropic, про него отдельная страница: Claude Code из России. Codex разбираем в Codex из России.
Про взлом OpenCode 17.10 писали в новостях ИИ-агентов для кода.
Ключ sk-ais- и проверка через /v1/models
Ключ выпускается на aishlyuz.ru/register, шаги есть на странице подключения. Перед настройкой харнесса убедитесь, что ключ живой и какие id на нём есть:
curl https://aishlyuz.ru/v1/models \
-H "Authorization: Bearer sk-ais-…"Id моделей берите из этого ответа, а не из памяти. Для первого запроса без расхода есть тестовая модель ais-test-1. Ключ удобно держать в переменной окружения:
export AISHLYUZ_API_KEY="sk-ais-…"OpenCode: свой провайдер в opencode.json
Конфиг лежит глобально в ~/.config/opencode/opencode.json или в корне проекта. Текущий релиз в npm (opencode-ai, 1.19.4 на 26.10.2026) понимает формат первой версии (provider), его мы и проверяли. OpenCode 2 читает оба формата: свой (providers) и формат первой версии.
Формат OpenCode 2
{
"$schema": "https://opencode.ai/config.json",
"model": "aishlyuz/deepseek-v4-pro",
"providers": {
"aishlyuz": {
"name": "AIShlyuz",
"package": "aisdk:@ai-sdk/openai-compatible",
"settings": {
"baseURL": "https://aishlyuz.ru/v1",
"apiKey": "{env:AISHLYUZ_API_KEY}"
},
"models": {
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro" },
"deepseek-v4-1-flash": { "name": "DeepSeek V4.1 Flash" }
}
}
},
"agents": {
"title": { "model": "aishlyuz/deepseek-v4-1-flash" }
}
}Ключ объекта providers это id провайдера, он же префикс в ссылке на модель: aishlyuz/deepseek-v4-pro. Ключ в models это id модели в OpenCode. Если он отличается от id у шлюза, добавьте modelID. Поля взяты из гайда миграции: npm из V1 стал package с префиксом aisdk:, options стали settings. Этот вариант мы вживую не запускали: в npm пока стабильна первая версия.
Формат OpenCode 1 (проверен)
Этот конфиг работает в текущем релизе. Переходить на V2 он тоже не мешает: по гайду миграции V2 нормализует поля V1 в памяти и не трогает файл.
{
"$schema": "https://opencode.ai/config.json",
"model": "aishlyuz/deepseek-v4-pro",
"small_model": "aishlyuz/deepseek-v4-1-flash",
"provider": {
"aishlyuz": {
"npm": "@ai-sdk/openai-compatible",
"name": "AIShlyuz",
"options": {
"baseURL": "https://aishlyuz.ru/v1",
"apiKey": "{env:AISHLYUZ_API_KEY}"
},
"models": {
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro" },
"deepseek-v4-1-flash": { "name": "DeepSeek V4.1 Flash" }
}
}
}
}Один провайдер держите целиком в одном формате. Смешивать поля V1 и V2 внутри одного провайдера OpenCode не умеет.
Ключ через /connect или переменную окружения
Второй способ задать ключ: в TUI выполнить /connect, пролистать до Other, ввести id провайдера и ключ. Id должен совпадать с ключом провайдера в конфиге, у нас это aishlyuz. Ключ сохраняется в ~/.local/share/opencode/auth.json, а /connect только кладёт ключ, провайдера всё равно описываете в конфиге. Проверить, что ключ на месте: opencode auth list. Список моделей провайдера без запуска TUI: opencode models aishlyuz.
small_model: служебные запросы
OpenCode гоняет служебную модель для мелочей вроде заголовков сессий. По документации по умолчанию это gpt-5-nano на Zen. Чтобы всё шло через ваш провайдер, укажите модель шлюза: в V1 это small_model, в V2 agents.title.model. Мы советуем быструю недорогую модель, в примере deepseek-v4-1-flash.
Модели GPT и Responses API
@ai-sdk/openai-compatible (V1) и @opencode/ai/providers/openai-compatible (V2) работают через /v1/chat/completions. Для моделей на /v1/responses документация советует @ai-sdk/openai в V1 и @opencode/ai/providers/openai-compatible/responses в V2. Пакет можно переопределить у отдельной модели. Шлюз отвечает и на /v1/chat/completions, и на /v1/responses, так что для начала хватает openai-compatible.
Проверка
Запустите OpenCode, выполните /models, провайдер aishlyuz и модели из конфига должны быть в списке. Первый запрос сделайте на ais-test-1: добавьте её в models и выберите. Без TUI то же самое: opencode run -m aishlyuz/ais-test-1 "привет". Тестовая модель отвечает заглушкой и инструменты не вызывает, вызов инструментов проверяйте на настоящей модели.
Kilo Code: Custom provider
Через интерфейс
1. Settings (шестерёнка) → вкладка Providers. 2. Внизу списка Custom provider. 3. Provider ID: aishlyuz. Display name: любое. 4. Provider API: OpenAI Compatible. 5. Base URL: https://aishlyuz.ru/v1. 6. API key: ваш sk-ais-…. 7. Модели Kilo подтянет с /v1/models сам. Если список пустой, нажмите Fetch models после правки адреса или ключа. 8. Submit.
Для OpenAI и xAI Kilo предлагает тип OpenAI Responses, для Anthropic тип Anthropic Messages. Через шлюз начните с OpenAI Compatible.
Через kilo.jsonc
Лимиты токенов и вызовы инструментов задаются в файле. Кладите его в глобальный ~/.config/kilo/kilo.jsonc. В файле модели перечисляются явно: без блока models Kilo CLI провайдера не видит (Provider not found).
{
"$schema": "https://app.kilo.ai/config.json",
"model": "aishlyuz/deepseek-v4-pro",
"provider": {
"aishlyuz": {
"options": {
"baseURL": "https://aishlyuz.ru/v1",
"apiKey": "{env:AISHLYUZ_API_KEY}"
},
"models": {
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro", "tool_call": true },
"deepseek-v4-1-flash": { "name": "DeepSeek V4.1 Flash", "tool_call": true }
}
}
}
}{env:…} Kilo подставляет только в доверенном конфиге: глобальный ~/.config/kilo, KILO_CONFIG, конфиг организации. В проектном kilo.json из репозитория ссылка игнорируется, и провайдер не авторизуется. Без tool_call: true агент не сможет править файлы и запускать команды. Для своих моделей задайте ещё limit.context и limit.output, иначе Kilo отключит сжатие контекста. В CLI проверка такая: kilo models aishlyuz, затем kilo run -m aishlyuz/ais-test-1 "привет".
Почему не KILO_AI_GATEWAY_URL
Переменная KILO_AI_GATEWAY_URL меняет адрес собственного шлюза Kilo (PR #15030). Сторонний провайдер она не задаёт. Для своего ключа нужен Custom provider.
Встроенные провайдеры Anthropic и Google
Через шлюз подключайте всё одним Custom provider. Так все модели живут под одним id провайдера с одним ключом.
Cline: OpenAI Compatible
По документации Cline: шестерёнка в панели Cline, API Provider «OpenAI Compatible», Base URL https://aishlyuz.ru/v1, API Key sk-ais-…, Model ID из /v1/models. Кнопка Verify проверит соединение. В Model Configuration можно задать окно контекста и максимум вывода.
Какую модель выбрать
Модель это расходник, берите под задачу. Все id ниже есть в нашем каталоге, цены за токены в каталоге моделей.
| Задача | Модель | Стрим и инструменты в OpenCode и Kilo (26.10.2026) |
|---|---|---|
| Основная работа в агенте | deepseek-v4-pro | работают |
| small_model, подагенты, массовые правки | deepseek-v4-1-flash | не проверяли отдельно |
| Сложные задачи на модели Anthropic | claude-sonnet-5-5 | работают |
| Open-weights альтернатива | glm-5-3 | работают |
| Open-weights альтернатива | kimi-k3 | работают |
Месячный расход под свою нагрузку прикиньте в калькуляторе. Подбор под вайбкодинг по деньгам: дешёвый API для вайбкодинга.
MCP тем же ключом
OpenCode и Kilo Code понимают удалённые MCP-серверы, а у шлюза есть десятки проверенных MCP-инструментов по адресу https://aishlyuz.ru/mcp с заголовком Authorization: Bearer sk-ais-…. В OpenCode 2 это блок mcp.servers с "type": "remote", "oauth": false и headers (доки). Что такое MCP и зачем он агенту: что такое MCP-сервер.
Типичные ошибки
- 401. Ключ неверный или не подставился. В Kilo проверьте, что
{env:}стоит в глобальном конфиге, а не в проектном. - 402. Закончился баланс.
- 404 или «Model Not Found». Id модели не совпадает с
/v1/models. - Двойной /v1. Base URL
https://aishlyuz.ru/v1, без/chat/completionsи без слеша на конце. Харнесс сам добавит путь. - Провайдер не виден в OpenCode. Id в
/connectне совпадает с ключом в конфиге. - Агент не правит файлы в Kilo. У модели нет
tool_call: true.
Остальное собрали в типичных ошибках подключения. Если сравниваете шлюзы, посмотрите карточки AITunnel и Polza AI.
Частые вопросы
Как подключить свой API-ключ к OpenCode?
Опишите custom provider в opencode.json с base URL https://aishlyuz.ru/v1. Ключ задайте через /connect → Other или переменную окружения.
Какой base URL указывать в OpenCode и Kilo Code?
https://aishlyuz.ru/v1, с /v1 и без слеша на конце. Харнесс сам добавит /chat/completions.
Как подключить Kilo Code к своему провайдеру?
Settings → Providers → Custom provider, тип OpenAI Compatible, base URL и ключ. Модели подтянутся с /v1/models.
Нужен ли аккаунт OpenCode Zen или Kilo?
Для своего провайдера хватает ключа шлюза: в нашей проверке OpenCode и Kilo CLI работали без входа в аккаунт. Аккаунт Zen или Kilo нужен для их собственных моделей.
Работает ли opencode.json от первой версии в OpenCode 2?
Да, V2 читает формат V1 без переписывания файла. Сам формат V1 мы проверили вживую в текущем релизе 1.19.4.
Какие модели доступны и сколько это стоит?
Список отдаёт GET /v1/models, цены за токены на /modeli. AIShlyuz — один ключ ко всем моделям, баланс сейчас начисляем по запросу в t.me/aishlyuz.
Можно ли так же подключить Cline? А Cursor?
Cline подключается через провайдера OpenAI Compatible. В Cursor ключ тоже задаётся в интерфейсе, но его работа из России сейчас не подтверждена, подробности в разборе Cursor.