Сообщение о тайм-ауте не доказывает ни сбой OpenAI, ни исчерпанный лимит. Codex мог не подключиться, не завершить инициализацию клиента, не дождаться запуска MCP-сервера, остановиться на одном инструменте, ждать завершения дочернего процесса или просто перестать показывать прогресс длинного задания. Внешне это одна пауза, но исправляют её разные владельцы.
Сначала сохраните то, что уже сделано. Не запускайте несколько копий задачи и не меняйте одновременно аккаунт, модель, сеть, провайдера и конфигурацию. Проверьте изменения в репозитории и активные процессы. Запишите точный текст ошибки, время с часовым поясом, интерфейс и версию Codex, последний завершённый шаг и идентификатор запроса или сессии, если он показан. Перед передачей записи удалите токены, адреса почты, приватные запросы и исходный код.
Главный диагностический вопрос: чего именно ждал Codex, когда ожидание закончилось?
Последний успешный шаг важнее слова timeout
| Что было видно последним | Какую границу проверять | Первый ограниченный тест |
|---|---|---|
| Приложение, CLI или расширение не стали готовы | Инициализация клиента, вход или соединение | Один чистый запуск с тем же аккаунтом и проектом |
| Connecting или повторные разрывы потока | Сеть хоста, VPN/proxy, удалённая машина или маршрут сервиса | Повтор на том же маршруте без параллельных сессий |
| MCP не запустился | Команда локального процесса, окружение или удалённый URL | codex mcp list, затем проверка только этого сервера |
| Один MCP-инструмент превысил время | Выполнение инструмента, downstream-сервис или объём входа | Минимальный read-only вызов того же инструмента |
| Команда не завершилась | Watcher, ожидание stdin, дочерний процесс или cleanup | Прямой запуск команды в том же каталоге |
| Turn активен, но новых действий нет | Запрос модели, цикл инструментов, approval, контекст или UI | Состояние сессии и последнее событие до resume |
| В ошибке есть HTTP 429 | Лимит аккаунта, проекта, workspace или провайдера | Отдельная диагностика 429 |
Открывающийся сайт в браузере не доказывает, что тот же адрес доступен процессу в sandbox, контейнере, WSL, IDE extension host или на машине Remote SSH. В официальном описании sandbox Codex approvals и доступ команд к файлам/сети — разные механизмы. Отсутствие запроса на подтверждение ещё не означает, что сетевой путь существует.

Зафиксируйте состояние до изменений
Достаточно короткого набора:
- desktop app, CLI, IDE, cloud или remote;
- версия клиента, ОС и фактический хост выполнения;
- тип аутентификации: ChatGPT, OpenAI API key или custom provider — без секрета;
- точная ошибка, время, request/session ID;
- активный MCP-сервер, инструмент или shell-команда;
- изменённые файлы и живые фоновые процессы;
- одна относящаяся к проблеме настройка вместо полного
config.toml.
Официальный справочник команд Codex назначает разным проверкам разные роли. /status показывает конфигурацию сессии и использование token/context. /debug-config показывает реально применённые слои конфигурации и источники политик. codex login status сообщает активный режим аутентификации. Ни одна из этих команд сама по себе не проверяет доступность MCP или сети. Если установленная версия не содержит команды, сверяйтесь с codex --help, а не с интерфейсом другой версии.
У MCP разные таймеры запуска и инструмента
Пример конфигурации показывает две независимые границы:
toml[mcp_servers.example] command = "example-mcp" startup_timeout_sec = 20 tool_timeout_sec = 90
В официальном руководстве MCP для startup_timeout_sec указан default 10 секунд, а для tool_timeout_sec — 60 секунд. Первый относится к инициализации сервера, второй — к одному вызову инструмента.
Если сервер не стартует, проверьте наличие executable, окружение, интерактивный ввод, URL и аутентификацию. Если падает один tool call, уменьшите вход, посмотрите логи сервера и downstream request ID. Увеличивать тайм-аут разумно лишь тогда, когда та же операция корректно завершается, но стабильно немного позже текущей границы. Недоступность, неверная аутентификация, crash или deadlock от более долгого ожидания не исчезнут.
Локальный STDIO MCP и удалённый streamable HTTP MCP оставляют разную диагностику. Кроме того, desktop app, CLI и IDE extension могут использовать общую MCP-конфигурацию одного Codex host, но не обязаны иметь одинаковое process environment или работать на одной удалённой машине. Запишите место фактического запуска.
Команда может ждать, когда соединение исправно
Dev server, test watcher и скрипт, ожидающий stdin, по замыслу могут не завершаться. Иногда основная работа закончена, но открытый handle или cleanup удерживает процесс. Это тайм-аут дочернего процесса, а не доказательство сетевой ошибки Codex.
Запустите команду отдельно в том же окружении и выясните:
- выдаёт ли она новые строки или уже опубликовала listening address;
- должна ли она завершиться сама;
- ожидает ли она интерактивный ввод.
Долгоживущий сервис нужно управляемо оставить в фоне и проверять отдельным readiness-тестом. Команду, которая должна завершаться, диагностируйте по её логу, дереву процессов и exit behavior. Увеличенный общий тайм-аут только скроет разницу.
Возобновляйте осторожно
Если сессия сохранилась, resume полезнее слепой копии. Официальная документация описывает codex resume для интерактивных сессий и codex exec resume для подходящих неинтерактивных запусков. Но сохранённый контекст не делает повтор внешней записи автоматически безопасным. Перед повтором проверьте Git, cloud job и remote service на частичное выполнение.

Хороший восстановительный тест меняет только одну подтверждённую переменную и выполняет небольшое read-only или обратимое действие с теми же аккаунтом, маршрутом, моделью и проектом. Сравните новую последнюю точку прогресса с исходной. Успех позволяет постепенно увеличить задачу; остановка на том же этапе даёт минимальное воспроизведение для поддержки.
Если доказательство указывает на precedence конфигурации, permissions или сеть команды, продолжите с руководством по sandbox и config.toml. Если это 429 или usage window, не смешивайте его с тайм-аутом. Надёжный путь — не «ждать дольше», а определить закончившееся ожидание и проверить только его владельца.



