Короткий ответ
С 29–30 октября 2026 года у многих пользователей OpenCode в России (Ростелеком в Иркутске, Перми и Ульяновске, а также Дом.ру) запросы падают с ошибкой ECONNRESET: The socket connection was closed unexpectedly или OpenCode просто молчит. Обновлений при этом не было, аккаунт тот же, подписка Go или Go Plus не помогает. Основная задача в трекере OpenCode — #60399, у неё метка reproduced; остальные сообщения закрыты как её дубликаты.
По замерам участников обсуждения, фильтрация трафика у провайдера молча обрывает TLS-рукопожатие с opencode.ai (а на части линий и с models.dev), если клиент передаёт постквантовый ключ. Из-за него рукопожатие весит около 1,5 КБ. OpenCode работает на среде Bun, а Bun с версии 1.4.1 передаёт такой ключ по умолчанию. Поэтому curl с того же компьютера до opencode.ai достукивается, а OpenCode — нет.
Что можно сделать:
- Ждать исправления в OpenCode. На 1 ноября 2026 года его нет, следите за #60399.
- Поставить OpenCode 1.19.3. Пользователи с затронутых линий пишут, что эта версия работает: это последний выпуск на старом Bun. Но это ветка v1, поэтому решение временное.
- Подключить свой API-провайдер. Запросы к своему провайдеру идут на его адрес, а не на
opencode.ai. Один из вариантов — TeamoRouter, он работает из России напрямую; настройка ниже.
Как выглядит ошибка
ECONNRESET: The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()
AI_APICallError: Cannot connect to API: ECONNRESET: The socket connection was closed unexpectedly.
Та же проблема выглядит и так:
opencode runнесколько минут ничего не выводит. В логе сервер запускается и загружает провайдеров и модели, а строк session и stream нет (#60399).- OpenCode Desktop показывает голый
ECONNRESET, пока повторяет запрос (#60680). - Перестаёт открываться и сайт opencode.ai (#60573).
Как проверить, что дело в этом
Пока OpenCode не работает, выполните в терминале:
curl -sS -o /dev/null -w "%{http_code}\n" https://opencode.ai/inference/v1/models
В Windows: curl.exe -sS -o NUL -w "%{http_code}" https://opencode.ai/inference/v1/models.
Если команда выводит 200, а OpenCode всё равно не работает, — это та самая фильтрация: curl отправляет короткое рукопожатие, и оно проходит. Если curl тоже не может подключиться, связь с opencode.ai пропала целиком, и причина другая.
Почему так происходит
Затронутые пользователи разобрали это в #60399:
- Что обрывается. TLS-рукопожатие с постквантовым ключом
X25519MLKEM768весит около 1,5 КБ и не помещается в один сетевой пакет. На затронутых линиях такие рукопожатия сopencode.aiиmodels.devостаются без ответа, а то же самое рукопожатие сgithub.comилиregistry.npmjs.orgпроходит. Без постквантовой части рукопожатие сopencode.aiпроходит нормально. Значит, фильтр смотрит и на адрес, и на вид рукопожатия. - Почему всё сломалось за один день. Участники связали это со средой Bun внутри OpenCode. OpenCode 1.19.3 — последний выпуск на Bun 1.3.14, у которого рукопожатие около 500 байт. OpenCode 1.19.4 и все выпуски v2 работают на Bun 1.4.x с большим рукопожатием. На этих линиях фильтр начал срабатывать 29–30 октября; участники считают, что правило включили централизованно за одну ночь.
- Дело не только в OpenCode. Chrome 124 и новее тоже передают постквантовый ключ и на тех же линиях тоже не открывают
opencode.ai. - Повторы не помогают. В тесте одного из участников 8 попыток из 8 с обычным рукопожатием не прошли, а без постквантового ключа прошли все.
Бот поддержки OpenCode воспроизвёл зависание: если рукопожатие застряло, OpenCode молча ждёт, как будто модель просто долго отвечает, и не сообщает о сетевой ошибке. Стандартный тайм-аут ожидания заголовков — около пяти минут, после него OpenCode открывает новое соединение и снова ждёт.
Что делать
- Следить за #60399. Участники предложили настройку, отключающую постквантовый ключ, или повтор без него, если рукопожатие зависло; бот OpenCode отметил первое как улучшение, которое стоит рассмотреть разработчикам. На 1 ноября 2026 года исправления нет.
- Временно поставить OpenCode 1.19.3. В #60534 пользователь с затронутой линии установил 1.19.3, и OpenCode снова заработал, а другой участник подтвердил, что 1.19.3 отвечает и на бесплатных моделях. Это выпуск ветки v1, а OpenCode переводит всех на v2, поэтому перед этим загляните в #60399. Установка:
npm install -g opencode-ai@1.19.3. - Подключить свой API-провайдер. Запросы к провайдеру, которого вы добавили сами, OpenCode отправляет на адрес этого провайдера, а не на
opencode.ai. API TeamoRouter по адресуapi.teamorouter.comфильтрация не затронула: запросы OpenCode от наших русскоязычных пользователей после 30 октября продолжили приходить, и их стало больше, а не меньше.
Продолжаем работу через TeamoRouter
У нового аккаунта баланс $0 — пополните его до первого запроса. Пополнить можно от $5. Если запрос возвращает 402 (в формате OpenAI, которым пользуется OpenCode, — 400) с текстом «wallet balance is insufficient», значит, баланс пуст, а base URL и ключ настроены правильно. Пополните баланс и повторите запрос.
TeamoRouter даёт один ключ для GPT, Gemini, DeepSeek, Kimi, GLM и Claude; списание идёт по токенам с предоплаченного баланса, подписки нет. Пополнить баланс можно в рублях: в окне пополнения нажмите «Оплатить» и выберите СБП, Т-Банк, ЮMoney или SberPay. Минимум — $5. Можно оплатить и USDT, USDC или ETH: пошагово — в статье «Как оплатить Claude API в USDT».
- Создайте API-ключ в консоли TeamoRouter.
- Добавьте провайдера в
~/.config/opencode/opencode.json(для всех проектов) или вopencode.jsonв папке проекта:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"teamorouter": {
"npm": "@ai-sdk/openai-compatible",
"name": "TeamoRouter",
"options": {
"baseURL": "https://api.teamorouter.com/v1",
"apiKey": "{env:TEAMOROUTER_API_KEY}"
},
"models": {
"gpt-6.1-sol": { "name": "GPT 6.1 Sol" },
"deepseek-flash-1017": { "name": "DeepSeek V4.1 Flash 1017" },
"kimi-k3.1-pro": { "name": "Kimi K3.1 Pro" },
"glm-5.3": { "name": "GLM-5.3" }
}
}
}
}
Это формат пользовательского провайдера из документации OpenCode 1; OpenCode 2 его тоже читает, как сказано в руководстве по переходу.
- Передайте OpenCode ключ:
export TEAMOROUTER_API_KEY="ваш ключ TeamoRouter"
OpenCode 2 отправляет запросы из общего фонового сервера, поэтому передайте переменную ему: opencode service set env TEAMOROUTER_API_KEY "ваш ключ" (документация).
- Выполните
/modelsи выберите модель TeamoRouter. Чтобы сделать её моделью по умолчанию, добавьте в конфиг"model": "teamorouter/gpt-6.1-sol".
В OpenCode Desktop того же провайдера можно добавить в Settings → Server → Providers → Custom provider — см. подключение OpenCode к TeamoRouter. Для моделей Claude лучше использовать Claude Code: этот провайдер работает по протоколу OpenAI и может не попадать в кэш промптов Claude.
Частые вопросы
Мой аккаунт OpenCode заблокировали? Нет. Соединение обрывается во время TLS-рукопожатия, до того как запрос доходит до OpenCode, так что аккаунт и подписка здесь ни при чём. Это же отмечают участники, которые проводили замеры в #60399 и #60534.
Поможет ли подписка Go или Go Plus?
Нет. Модели Go тоже обслуживаются через opencode.ai, поэтому ошибка та же.
Почему curl работает, а OpenCode — нет?
curl отправляет короткое рукопожатие без постквантового ключа, и фильтр его пропускает.
Поможет ли обновление OpenCode? Пока нет: все выпуски v2 работают на новой версии Bun. Следите в #60399 за выпуском, в котором появится способ отключить постквантовый ключ.