opencode в России: настройка своего провайдера
Коротко: opencode — это ИИ-агент для терминала, который не привязан к одному провайдеру. В файле opencode.json можно объявить любой OpenAI-совместимый сервис, указать его baseURL и ключ — и работать дальше как обычно. Ниже — готовый конфиг и разбор ошибок, на которых спотыкаются чаще всего.
Что такое opencode
opencode — консольный агент для написания кода: он читает проект, правит файлы, запускает команды и умеет работать headless (без интерфейса), что удобно для CI. От расширений вроде Cline он отличается тем, что живёт в терминале и не требует VS Code.
Ключевое для нас свойство — свои провайдеры. opencode подключает их через пакет @ai-sdk/openai-compatible, который рассчитан ровно на эндпоинт /v1/chat/completions. Поэтому любой сервис с OpenAI-совместимым API добавляется в конфиг руками.
Шаг 1. Установка
Через npm (нужен Node.js 20 и новее):
npm install -g opencode-aiПроверьте, что бинарник на месте:
opencode --versionШаг 2. Получите base_url и ключ
Нужны две вещи, и обе выдаются одной кнопкой прямо здесь:
- Base URL вида
https://twelver.ru/api/ai/<config-id>/v1— здесьconfig-idэто ваш слот конфигурации, в котором хранится выбранная серия моделей; - API-ключ вида
sk-…— показывается один раз, скопируйте сразу.
Прямо на странице
Получите доступ и готовый opencode.json
Кнопка создаёт конфиг и ключ — регистрация и карта не нужны. В блоке ниже ваш config-id и ключ уже подставлены, останется скопировать. Там же можно сразу отправить первый запрос и убедиться, что доступ живой.
Нажмите — и получите base_url и API-ключ.
Регистрация и карта не нужны.
Бесплатно. Ключ появится прямо здесь.
Скопированный конфиг рабочий как есть. Но ключ в нём лежит открытым текстом, поэтому в проекте его лучше вынести в переменную окружения — так он не уедет в git:
~/.zshrc или ~/.bashrcПодсвеченное — заглушки. Их выдаёт кнопка выше: пара секунд, без регистрации и карты.export TWELVER_API_KEY="sk-<ваш-ключ>"Шаг 3. Пропишите провайдера в opencode.json
Глобальный конфиг лежит в ~/.config/opencode/opencode.json, конфиг проекта — в opencode.json в корне репозитория. Настройки проекта перекрывают глобальные, так что под конкретный проект можно поставить другую модель.
Вариант из виджета выше объявляет одну модель — auto. Ниже тот же конфиг, но развёрнутый: ключ вынесен в переменную окружения, объявлено несколько серий и добавлен small_model.
opencode.jsonПодсвеченное — заглушки. Их выдаёт кнопка выше: пара секунд, без регистрации и карты. Синее — не заглушка: {env:…} подставляет значение из переменной окружения. Оставьте как есть.{
"$schema": "https://opencode.ai/config.json",
"provider": {
"twelver": {
"npm": "@ai-sdk/openai-compatible",
"name": "Twelver",
"options": {
"baseURL": "https://twelver.ru/api/ai/<ваш-config-id>/v1",
"apiKey": "{env:TWELVER_API_KEY}"
},
"models": {
"auto": { "name": "Qwen3.7-Plus (auto)" },
"qwen-flash": { "name": "Qwen3.8-Flash" },
"zai": { "name": "GLM-5.3" },
"grok": { "name": "Grok 4.6" }
}
}
},
"model": "twelver/auto",
"small_model": "twelver/qwen-flash"
}Два поля внизу решают, сколько вы потратите. model — основная модель, которой агент пишет код. small_model — дешёвая модель для служебных задач (заголовки сессий, короткие вспомогательные запросы). Если её не задать, opencode использует основную модель и для этих мелких запросов.
Частая ошибка: лишний слэш
baseURL не должно быть завершающего слэша. Адрес оканчивается на /v1, а не на /v1/ — иначе opencode соберёт путь с двойным слэшем и получит 404.Если конфиг не хочется собирать руками
Попросите ИИ настроить opencode за вас
Откроется чат с уже набранным вопросом — останется нажать «отправить». API-интегратор выдаст ваш base_url и ключ, соберёт готовый opencode.json под выбранную серию и посчитает, во сколько обойдутся запросы. Туда же можно вставить текст ошибки, если запуск не удался.
Шаг 4. Запуск
cd ваш-проект
opencodeВнутри сессии модель переключается командой /models — там появится провайдер twelver с моделями, которые вы объявили в конфиге. Правила для агента (стиль кода, что трогать нельзя) кладутся в файл AGENTS.md в корне проекта.
Какую серию выбрать
Названия моделей в конфиге — это серии, а не конкретные версии. Серия сама указывает на актуальную модель, поэтому конфиг не придётся править после обновления.
| Серия | Модель | Вход / выход, ₽ за 1 млн | Когда брать |
|---|---|---|---|
| qwen-flash | Qwen3.8-Flash | 15 / 47 | small_model — самый дешёвый вход, но не для правки кода |
| zai-flash | GLM-5.3-Flash | 15 / 50 | small_model, альтернатива qwen-flash |
| gpt | GPT-5.6 Luna | 20 / 120 | Дешёвый вход при заметно более сильной модели, чем flash-серии |
| auto / qwen | Qwen3.7-Plus | 40 / 160 | Рабочая лошадка на каждый день — основная модель агента |
| deepseek-flash | DeepSeek V4 Flash | 44 / 132 | Дешёвые массовые запросы |
| minimax | MiniMax M3 | 60 / 240 | Простые правки, длинный контекст |
| xiaomi | MiMo V2.5 Pro | 100 / 300 | Когда «auto» не дотягивает |
| zai | GLM-5.3 | 140 / 440 | Рефакторинг, длинные цепочки правок |
| grok | Grok 4.6 | 200 / 600 | Сложные задачи и разбор архитектуры |
| qwen-max | Qwen3.8-Max | 200 / 600 | Сложные задачи, 1 млн токенов контекста |
| deepseek | DeepSeek V4 Pro | 240 / 480 | Сильные рассуждения; выход дешевле, чем у grok |
| gpt-max | GPT-6 Astra | 1000 / 5000 | Точечно, когда всё остальное не справилось |
Чего в этом API нет
provider, другой baseURL.Как не переплачивать
- Задайте
small_model. Служебные запросы идут постоянно, и на дорогой модели они незаметно съедают заметную долю счёта. - Новая сессия под новую задачу. Контекст отправляется целиком при каждом запросе, поэтому длинная сессия дорожает с каждым сообщением.
- Сужайте контекст. Чем меньше файлов агент тянет в запрос, тем дешевле выходит вход — а именно вход доминирует в счёте.
- Начинайте с дешёвой серии. Поднимать класс модели стоит только там, где качества действительно не хватило.
Если не работает
| Симптом | Причина | Что делать |
|---|---|---|
| 401 / Unauthorized | Ключ не подставился из окружения | Проверьте, что переменная экспортирована в той же оболочке: echo $TWELVER_API_KEY |
| 404 на запросе | Лишний слэш или неверный config-id в baseURL | Адрес должен оканчиваться на /v1 без слэша, config-id — из вашей конфигурации |
| Model not found | В конфиге указана серия, которой нет | Сверьте название серии с таблицей выше; список отдаёт GET /v1/models |
| Провайдера нет в /models | opencode не подхватил конфиг | Проверьте, что JSON валиден и файл лежит в ~/.config/opencode/ либо в корне проекта |
| Ответ обрывается | Упёрлись в окно контекста | Начните новую сессию или возьмите серию с большим контекстом |
Частые вопросы
Как подключить opencode к своему API?
opencode.json объявите блок provider с пакетом @ai-sdk/openai-compatible, укажите baseURL вашего провайдера и ключ через {env:ПЕРЕМЕННАЯ}, затем задайте model в формате провайдер/модель. Конфиг читается при старте, так что после правки файла перезапустите opencode.Сколько стоит opencode?
qwen-flash); для основной модели агента обычно берут auto — 40 / 160 ₽ за 1 млн вход / выход. Оплата в рублях.Работает ли opencode в России?
Что такое small_model в opencode?
Чем opencode отличается от Cline?
Где хранится конфиг opencode?
~/.config/opencode/opencode.json, проектный — в opencode.json в корне репозитория. Проектный перекрывает глобальный, поэтому под отдельный проект можно назначить свою модель.Попробуйте сами
Получите base_url и ключ прямо сейчас
Кнопка на странице API выдаёт адрес и ключ сразу — без регистрации и без привязки карты.
Получить API-ключ