Блог

Codex «stream disconnected before completion»: «программа на вашем хост-компьютере разорвала установленное подключение» и другие причины — как исправить

Короткий ответ

stream disconnected before completion значит, что поток ответа Codex оборвался уже после того, как запрос был принят, но до того, как модель закончила ответ. Это не одна конкретная ошибка: настоящую причину Codex пишет после двоеточия. На Windows с русским интерфейсом она выглядит так:

Текст после двоеточия Что это значит
IO error: Программа на вашем хост-компьютере разорвала установленное подключение. (os error 10053) Соединение оборвала программа на вашем компьютере: брандмауэр, антивирус, VPN-клиент или прокси
IO error: Удаленный хост принудительно разорвал существующее подключение. (os error 10054) Соединение сбросил сервер или узел по пути: прокси, VPN или сетевое оборудование
Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. (os error 10061) По адресу, куда обращается Codex, никто не ответил; чаще всего это локальный прокси, который уже не запущен
error sending request for url (...) Запрос вообще не ушёл: DNS, прокси или сеть
stream closed before response.completed Соединение закрылось посреди ответа
websocket closed by server before response.completed Сервер закрыл WebSocket до конца ответа; обычно это на стороне OpenAI
idle timeout waiting for SSE / idle timeout waiting for websocket За время ожидания (по умолчанию 5 минут) не пришло ни одного события
Rate limit reached for ... / Request too large for ... Превышен лимит токенов или запросов в минуту
regurg plugin blocked the output stream. Серверы OpenAI заблокировали вывод модели (HTTP 400 safety_violation); сеть ни при чём

Сначала Codex повторяет запрос сам — это строка Reconnecting... 1/5 перед ошибкой. Если ошибка появляется изредка, достаточно повторить ход. Если каждый раз — ищите причину по тексту после двоеточия.

Если вы в России: Россия не входит в список стран, которые поддерживает OpenAI, поэтому вход через ChatGPT и оплата ключей OpenAI из России официально недоступны. Codex можно подключить к API-шлюзу TeamoRouter по ключу — без аккаунта OpenAI и с оплатой в рублях; как это сделать — в разделе «Codex с ключом TeamoRouter» ниже.

У нового аккаунта баланс $0 — пополните его до первого запроса. Пополнить можно от $5. Если запрос возвращает 402 (в формате OpenAI — 400) с текстом «wallet balance is insufficient», значит, баланс пуст, а base URL и ключ настроены правильно. Пополните баланс и повторите запрос.

Как выглядит ошибка

Сообщение задано в исходном коде Codex (codex-rs/protocol/src/error.rs) как stream disconnected before completion: {reason} — для потока, который оборвался или вернул ошибку после успешного HTTP-рукопожатия, но до события response.completed. Codex считает такую ошибку временной и повторяет ход.

Во время повторов виден счётчик, как в openai/codex#47538:

text
Reconnecting... 1/5 (stream disconnected before completion: stream closed before response.completed)

Варианты, которые встречаются у пользователей с русской Windows:

text
stream disconnected before completion: IO error: Программа на вашем хост-компьютере разорвала установленное подключение. (os error 10053)
stream disconnected before completion: IO error: Удаленный хост принудительно разорвал существующее подключение. (os error 10054)
stream disconnected before completion: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. (os error 10061)

С английским интерфейсом те же ошибки выглядят как An established connection was aborted by the software in your host machine. (os error 10053) и No connection could be made because the target machine actively refused it. (os error 10061) (#54459, #49466).

По адресу в сообщении видно, куда обращался Codex: chatgpt.com/backend-api/codex/... — при входе через ChatGPT, api.openai.com/v1/... — с ключом OpenAI API, адрес из base_url — со своим провайдером.

Причины и решения

os error 10053: «Программа на вашем хост-компьютере разорвала установленное подключение»

Соединение закрыла программа на вашем же компьютере: брандмауэр, антивирус, VPN-клиент или прокси. Проверьте, пропадает ли ошибка, если временно их приостановить, и добавьте Codex в исключения.

os error 10054: «Удаленный хост принудительно разорвал существующее подключение»

Соединение сбросила другая сторона: сервер или узел по пути — прокси, VPN, сетевое оборудование. Если ошибка повторяется только в одной сети, попробуйте другую сеть. Если вы подключаетесь через свой провайдер или шлюз, посмотрите в его логах, что случилось с запросом.

os error 10061: «Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение»

По адресу, куда стучится Codex, никто не отвечает. Самая частая причина — прокси, который Codex пытается использовать, хотя он уже выключен. В #38885 Codex продолжал слать трафик на 127.0.0.1:7890, потому что забытый файл ~/.codex/.env задавал HTTP_PROXY, HTTPS_PROXY и ALL_PROXY, а само приложение-прокси было закрыто. Проверьте этот файл и переменные окружения в терминале и удалите лишние настройки. На macOS та же ошибка выглядит как os error 61, на Linux — os error 111.

error sending request for url

Запрос не ушёл из-за DNS, прокси или сети. Выполните codex doctor, затем из того же терминала проверьте адрес из сообщения, например curl -I https://api.openai.com/v1/models. Любой HTTP-код значит, что адрес доступен; ошибка соединения — что проблема в сетевом пути, а не в Codex.

stream closed before response.completed и websocket closed by server

Ответ начал приходить, но соединение закрылось до финального события. Это может сделать что угодно между вами и сервером — нестабильный Wi-Fi, VPN, прокси, который рвёт долгие соединения, — или сам сервер. При входе через ChatGPT Codex получает ответ по WebSocket с wss://chatgpt.com/backend-api/codex/responses; о закрытии этого соединения сервером пишут и из CLI, и из приложения (#18960). Если ошибка редкая — повторите ход; если частая — обновите Codex (npm install -g @openai/codex@latest) или подключите его к своему провайдеру по API-ключу, как описано ниже.

idle timeout waiting for SSE / idle timeout waiting for websocket

За время ожидания не пришло ни одного события. Причина — долгое рассуждение модели или зависшее соединение. Для своего провайдера таймаут задаётся параметром stream_idle_timeout_ms (по умолчанию 300000, то есть 5 минут) в его блоке в ~/.codex/config.toml (справочник по настройкам).

Rate limit reached и Request too large

Rate limit reached for ... Please try again in 13.694s — временное ограничение, подождите указанное время. Request too large for ... значит, что один запрос больше всего минутного лимита, и ожидание не поможет: начните новый тред или сожмите разговор командой /compact (#38366).

regurg plugin blocked the output stream

Это не сеть: серверы OpenAI остановили вывод модели на середине (HTTP 400, код safety_violation) (#51937). Повтор того же запроса в том же треде обычно снова падает. Помогает переформулировать задачу или разбить её на шаги в новом треде либо сменить модель командой /model.

Повторы и таймауты для своего провайдера

Если Codex работает через провайдера из [model_providers.<id>], в его блоке можно задать (значения по умолчанию — из справочника):

Параметр По умолчанию Что делает
request_max_retries 4 Повторы HTTP-запроса к провайдеру
stream_max_retries 5 Повторы после обрыва потока
stream_idle_timeout_ms 300000 Сколько поток может молчать, прежде чем Codex сочтёт его оборванным

Больше повторов помогает в сети, где соединение иногда рвётся. Не помогает, если запрос слишком большой или что-то неверно настроено.

Codex с ключом TeamoRouter: без аккаунта OpenAI, оплата в рублях

TeamoRouter — API-шлюз: один ключ для GPT, Claude, Gemini и DeepSeek. Он поддерживает OpenAI Responses API (/v1/responses), поэтому Codex подключается к нему как к своему провайдеру — запросы идут на api.teamorouter.com, а не на chatgpt.com. Подписки нет, оплата — за использованные токены.

  1. Создайте API-ключ в консоли TeamoRouter. Он начинается с sk-teamo-.
  2. Пополните баланс от $5.
    • Рубли — в окне пополнения выберите способ справа на кнопке «Оплатить» — СБП, Т-Банк, ЮMoney или SberPay — и нажмите на кнопку. Платёж проводит платёжный сервис Payssion. Если платёж не проходит, под кнопкой есть контакты поддержки — Telegram @teamorouter.
    • USDT, USDC или ETH — кнопка «Оплатить криптовалютой» в том же окне; этот способ выручает, если платёж в рублях не прошёл. Выберите монету и сеть и переведите средства с Binance, OKX или другой биржи либо из любого кошелька, расширение не нужно; минимум — $5 (USDT в сети BEP20). Пошагово — в статье «Как оплатить Claude API в USDT».
  3. Добавьте провайдера в ~/.codex/config.toml. Две последние строки необязательны:
toml
model_provider = "teamorouter"
model = "gpt-6.1-sol"

[model_providers.teamorouter]
name = "TeamoRouter"
base_url = "https://api.teamorouter.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
stream_max_retries = 10
stream_idle_timeout_ms = 300000
  1. Задайте ключ и проверьте путь из того терминала, где будете запускать Codex:
bash
export OPENAI_API_KEY="sk-teamo-..."
curl https://api.teamorouter.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

Если пришёл список моделей, путь и ключ в порядке; запускайте codex из того же терминала. Команды для Windows — в инструкции «Установка и подключение Codex». Эту настройку мы проверили 2 ноября 2026 года на Codex CLI 0.166.0: запросы к gpt-6.1-sol ушли на /v1/responses шлюза, а с stream_max_retries = 10 Codex делал до 10 повторов. Подробнее о модели — в статье «GPT-6.1 Sol через API».

Частые вопросы

«stream disconnected» — это проблема сети? Иногда. Это обёртка над многими причинами. os error 10053, 10054, 10061 и error sending request — сеть; Rate limit reached и An error occurred while processing your request — нет.

Codex сам повторяет запрос? Да. Строка Reconnecting... N/5 — это повторы Codex. После них он может переключиться с WebSocket на HTTPS и только потом показать ошибку.

Поможет ли выйти из аккаунта и войти снова? При сетевых причинах и лимитах — нет.

Нужен ли аккаунт OpenAI, чтобы пользоваться Codex с TeamoRouter? Нет. Codex работает по ключу TeamoRouter, а баланс пополняется в рублях.

Читайте также

Готовы подключиться?Войдите в консоль, пополните баланс и создайте API-ключ.