AIFreeAPI Logo

Тайм-аут Codex: сначала найдите этап, на котором всё остановилось

A
4 min readOpenAI Codex

Тайм-аут говорит лишь о завершившемся ожидании. Сохраните состояние, установите последний успешный шаг и превратите следующий запуск в один понятный тест.

Разработчик определяет этап тайм-аута Codex, сохраняет состояние и готовит один ограниченный тест перед продолжением

Сообщение о тайм-ауте не доказывает ни сбой OpenAI, ни исчерпанный лимит. Codex мог не подключиться, не завершить инициализацию клиента, не дождаться запуска MCP-сервера, остановиться на одном инструменте, ждать завершения дочернего процесса или просто перестать показывать прогресс длинного задания. Внешне это одна пауза, но исправляют её разные владельцы.

Сначала сохраните то, что уже сделано. Не запускайте несколько копий задачи и не меняйте одновременно аккаунт, модель, сеть, провайдера и конфигурацию. Проверьте изменения в репозитории и активные процессы. Запишите точный текст ошибки, время с часовым поясом, интерфейс и версию Codex, последний завершённый шаг и идентификатор запроса или сессии, если он показан. Перед передачей записи удалите токены, адреса почты, приватные запросы и исходный код.

Главный диагностический вопрос: чего именно ждал Codex, когда ожидание закончилось?

Последний успешный шаг важнее слова timeout

Что было видно последнимКакую границу проверятьПервый ограниченный тест
Приложение, CLI или расширение не стали готовыИнициализация клиента, вход или соединениеОдин чистый запуск с тем же аккаунтом и проектом
Connecting или повторные разрывы потокаСеть хоста, VPN/proxy, удалённая машина или маршрут сервисаПовтор на том же маршруте без параллельных сессий
MCP не запустилсяКоманда локального процесса, окружение или удалённый URLcodex 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 и доступ команд к файлам/сети — разные механизмы. Отсутствие запроса на подтверждение ещё не означает, что сетевой путь существует.

Карта границ тайм-аута Codex от подключения и MCP до инструмента, дочернего процесса и зависшего хода задания
Карта границ тайм-аута Codex от подключения и MCP до инструмента, дочернего процесса и зависшего хода задания

Зафиксируйте состояние до изменений

Достаточно короткого набора:

  • 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.

Запустите команду отдельно в том же окружении и выясните:

  1. выдаёт ли она новые строки или уже опубликовала listening address;
  2. должна ли она завершиться сама;
  3. ожидает ли она интерактивный ввод.

Долгоживущий сервис нужно управляемо оставить в фоне и проверять отдельным readiness-тестом. Команду, которая должна завершаться, диагностируйте по её логу, дереву процессов и exit behavior. Увеличенный общий тайм-аут только скроет разницу.

Возобновляйте осторожно

Если сессия сохранилась, resume полезнее слепой копии. Официальная документация описывает codex resume для интерактивных сессий и codex exec resume для подходящих неинтерактивных запусков. Но сохранённый контекст не делает повтор внешней записи автоматически безопасным. Перед повтором проверьте Git, cloud job и remote service на частичное выполнение.

Ограниченный тест восстановления Codex: не увеличивать тайм-аут вслепую, менять одну переменную и фиксировать результат
Ограниченный тест восстановления Codex: не увеличивать тайм-аут вслепую, менять одну переменную и фиксировать результат

Хороший восстановительный тест меняет только одну подтверждённую переменную и выполняет небольшое read-only или обратимое действие с теми же аккаунтом, маршрутом, моделью и проектом. Сравните новую последнюю точку прогресса с исходной. Успех позволяет постепенно увеличить задачу; остановка на том же этапе даёт минимальное воспроизведение для поддержки.

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