Сессия Codex CLI на час работы: команды, расход контекста и откат через git

26 мин. чтения
Bybit
$30,100 + $5,030
100 USDT в подарок
Получить →

Коротко (TL;DR). Пока задача занимает пять минут, сессией управлять не нужно. Через час работы всё меняется: контекст забит, агент отвечает не на то, что вы спросили, а в проекте лежат правки, о которых вы уже не помните. Главное, что нужно понимать:

  • у сессии есть приборы: индикатор «N% context left» в правом нижнем углу и команда /status;
  • освободить контекст можно тремя разными способами — /compact, /clear и /new, и последствия у них разные;
  • вернуться в прерванную работу — codex resume (или codex resume --last), сделать вторую попытку без порчи основной линии — codex fork;
  • отката правок в Codex нет: команду /undo убрали, флаг undo = true в конфиге теперь не делает ничего, и откат обеспечивает ваш git.

Всё, что ниже, сверено на 11 августа 2026: стабильная версия Codex CLI — 0.147.0 (вышла 7 августа), в альфа-канале 0.148.0-alpha.7. Состав команд снят с исходников и с официального справочника: набор меняется от релиза к релизу, поэтому даты важнее, чем кажется. Про сам экран терминала и один рабочий цикл «запрос → правки» есть отдельный разбор — интерфейс Codex CLI и рабочий цикл; здесь речь о том, что происходит с сессией на длинной дистанции.

Команды сессии Codex CLI: полная таблица с живым примером

Slash-команда — это команда, которую вы набираете прямо в поле ввода агента, начиная со слэша. Она управляет не кодом, а самой сессией: моделью, правами, контекстом, записью разговора. Наберите / — откроется список с подсказками, и его можно фильтровать, продолжая печатать.

Официальный перечень OpenAI называет их developer commands (в обиходе — codex slash commands). Команд больше сорока, но к управлению длинной сессией относится около двух десятков. Вот они — с тем, что каждая реально делает, и с примером, когда её звать.

BYBIT COPY TRADINGКопитрейдинг на BybitОткрытая статистика трейдеров, старт с $10, отключение в один клик.Выбрать трейдера
КомандаЧто делаетЖивой пример: когда нужна
/statusПоказывает конфигурацию текущей сессии и расход токеновАгент начал тупить: сначала смотрим, какая модель, какие права и сколько контекста осталось
/usageПоказывает расход по аккаунту (это лимиты тарифа, не контекст)«Почему он отказывается работать» — проверяем, не выбрана ли квота плана
/compactСжимает разговор, чтобы не упереться в лимит контекстаОсталось меньше пятой части окна, а рефакторинг не закончен
/newНачинает новый чат, не выходя из CodexЗакончили с миграцией базы, следующая задача — вёрстка страницы
/clearЧистит терминал и начинает новый чатЭкран зарос выводом тестов, и вы хотите начать со следующей задачи с чистого листа
/resumeОткрывает список сохранённых чатов и возвращает выбранныйУтром продолжаете то, что бросили вечером
/forkОтводит новую ветку от текущего чатаХотите попробовать второй подход, не портя запись рабочего
/side (или /btw)Побочный разговор в одноразовой веткеНужно быстро спросить «а что делает эта функция», не засоряя основную задачу
/goalЗадаёт или показывает цель длинной задачиРабота на несколько часов: цель ставится один раз, агент держит её сам
/diffПоказывает git-диф, включая файлы, которые git ещё не отслеживаетПеред коммитом: проверить, что именно агент наменял и не создал ли лишних файлов
/rolloutПечатает путь к файлу текущей сессииНужно заглянуть в запись разговора или сохранить её себе
/exportВыгружает переписку в markdownПередаёте задачу коллеге или кладёте разбор в документацию
/renameПереименовывает текущий чатВ списке сессий пять безымянных — подписываем, пока помните, о чём был этот
/archiveАрхивирует сессию и выходитЗадача сдана, чат из списка убрать, но запись сохранить
/deleteУдаляет сессию навсегда и выходитВ переписку попало лишнее, и запись не должна остаться на диске
/debug-configПоказывает, какие значения конфига реально действуютПроверить, какое окно и какой порог сжатия применились на самом деле
/permissionsВыбирает, что агенту разрешено без вопросовНачинается участок, где он будет много писать в файлы
/modelМеняет модель и уровень рассуждений внутри сессииЗадача усложнилась — или наоборот, стала механической

Две строки в этой таблице стоит развернуть отдельно, потому что за ними прячутся ошибки. /permissions — это не «включить всё»: песочница и политика одобрений в Codex настраиваются раздельно, и разобраны они в уроке про режимы одобрения и песочницу. А /usage часто путают с контекстом: он про квоту тарифа ChatGPT, то есть про лимиты плана, и к размеру окна сессии отношения не имеет.

Какие команды Codex не работают, пока агент занят

Это то, чего нет ни в одном справочнике, а на практике бьёт больно. В исходниках Codex лежит отдельная таблица доступности: часть команд нельзя выполнить, пока агент делает ход. Среди недоступных — /compact, /new, /clear, /fork, /archive, /delete, /init, /export, /review, /plan.

Логика ясная: все они меняют саму сессию, а менять её посреди хода нельзя. Но следствие неприятное: «сожму контекст на ходу, пока он думает» не сработает — а именно в этот момент вам обычно и хочется.

Что делать вместо этого:

  • Tab — поставить команду или уточнение в очередь на следующий ход. Команда разберётся, когда до неё дойдёт дело, поэтому её меню и возможные ошибки вы увидите только после текущего хода.
  • Enter — вбросить инструкцию в текущий ход, если агент явно пошёл не туда.
  • Esc — прервать ход: пока агент занят, строка состояния сама подсказывает esc to interrupt. После остановки хода нет, поэтому доступны все команды. Клавишу можно переназначить через /keymap, так что подсказка на экране надёжнее памяти.

Практический вывод: решение «сжимать или начинать заново» принимают до того, как отправили тяжёлый запрос, а не в середине.

«N% context left»: от какого числа Codex считает остаток

В правом нижнем углу интерфейса светится строка вида 100% context left. Это остаток контекстного окна — того объёма текста, который модель держит перед глазами: ваши сообщения, её ответы, содержимое прочитанных файлов и вывод запущенных команд. Если процент по какой-то причине неизвестен, вместо него показывается объём израсходованных токенов.

Важно понимать, что считается остаток не от одной величины, а от минимума двух: сколько осталось до порога автоматического сжатия и сколько осталось до полного окна модели. Порог всегда ниже потолка, поэтому обычно вы смотрите именно на него.

Bybit · Rewards Hubдо $30,100Внеси депозит, торгуй 14 дней — и забери награды в Rewards HubЗабрать бонус →
Что смотретьГдеЧто это значит
N% context leftправый нижний уголсколько места осталось до сжатия или до потолка окна
/statusвводом в полемодель, права, папки и расход токенов текущей сессии
/debug-configвводом в полекакие значения окна и порога сжатия реально применились
/usageвводом в полерасход квоты тарифа — другая сущность, не контекст

Отдельная деталь, которую стоит знать заранее: постоянные инструкции проекта тоже занимают место. Файл AGENTS.md подаётся агенту на каждом ходу независимо от того, нужен он прямо сейчас или нет; по сторонним замерам все такие инструкции сводятся в один файл с потолком 32 КиБ. То есть раздутый AGENTS.md — это не разовая, а постоянная плата за каждый ход.

Почему в Codex видно 258k вместо миллиона токенов

Это самая частая претензия к длинным сессиям, и она построена на сравнении двух разных чисел. В трекере проекта лежат обращения от 13 и 23 июля 2026 с одинаковым текстом: окно было 353 тысячи, стало 258 тысяч, а рекламируют миллион.

Арифметика на 11 августа 2026 такая. В параметрах модели, которые использует CLI, стоит окно 272 000 токенов, а рабочей считается доля 95%:

  • 272 000 × 0,95 ≈ 258 400 токенов — ровно то число, на которое жалуются;
  • по независимому разбору потолок 400 000 складывается из 272 000 входных токенов и 128 000, зарезервированных под ответ модели;
  • миллион с лишним — это потолок самой модели в API, а не бюджет вашей сессии в Codex.

Оговорка, без которой цифры вводят в заблуждение: 272 000 в коде — это резервное значение, которое берётся, когда параметры модели неизвестны. Реальные приходят с сервера и меняются вместе с моделями. Поэтому запоминать надо не число, а способ его узнать: /status и /debug-config показывают, что действует у вас сегодня.

Отсюда же ответ на вопрос «codex как увеличить контекст». В конфиге есть ключ model_context_window, и его действительно можно задать. Но в коде значение из конфига обрезается по максимуму модели: берётся меньшее из двух. Поднять окно выше модельного нельзя — ключ годится только чтобы занизить его (например, чтобы сжатие срабатывало раньше). Работающих способов «включить миллион» из конфига не существует, что бы ни обещали посты в соцсетях.

Как Codex сжимает контекст и что при этом теряется

Сжатие (compaction) — это замена длинной переписки короткой выжимкой, чтобы работа продолжилась в том же чате. В Codex это не локальная операция «модель пересказала себе диалог»: для codex-моделей CLI обращается к серверу — есть отдельный вызов сжатия и параметр порога compact_threshold, после которого сжатие запускается автоматически.

Ответ приходит в виде шифрованного элемента, и официальная формулировка тут прямая: он непрозрачен и не предназначен для чтения человеком. Практических следствий два: выжимку нельзя посмотреть и нельзя поправить. Вместе с ней в новое окно переносится часть элементов предыдущего — то есть это не «всё выбросили, оставили абзац».

Что просят сохранить при сжатии, известно точно: сам промпт лежит в репозитории и требует «контрольную точку контекста» — передать другой модели, которая продолжит задачу, четыре вещи:

  1. текущий прогресс и принятые решения;
  2. важный контекст, ограничения и предпочтения пользователя;
  3. что осталось сделать — понятными следующими шагами;
  4. критичные данные, примеры и ссылки, нужные для продолжения.

Следующее окно получает выжимку с преамбулой «другая модель начинала эту задачу и оставила краткое изложение своих размышлений — опирайся на него и не дублируй работу».

Из этого списка видно и то, чего в нём нет: формулировок, оттенков, вашего «только не трогай папку legacy, там всё держится на честном слове», если это не было записано как ограничение. Пользователи это чувствуют — в трекере есть просьба сохранять последние операционные шаги дословно, потому что после сжатия теряется цепочка уже сделанного.

Отсюда главный приём длинной работы: важное складывать в файл, а не в чат. Файл переживёт любое сжатие, реплика — не обязательно. Тот же принцип, только на примере другого агента, разобран в материале о том, как не терять контекст между сессиями.

Что делает Codex, когда контекст кончился

У конца окна есть двухступенчатая механика, о которой почти не пишут, а она объясняет странное поведение агента.

Ступень первая — предупреждение. В настройках есть порог остатка (reminder_threshold_tokens): когда до сжатия остаётся меньше заданного числа токенов, в разговор подставляется напоминание, и в него подставляется само число остатка. Приходит оно один раз. Если вы видели, что агент вдруг начал «сворачиваться» и подводить итоги без вашей просьбы — скорее всего, он получил именно это напоминание.

Ступень вторая — аварийная заметка. Отдельно резервируется небольшой запас токенов сверх порога, и в описании он назван прямо: дополнительные токены на заметки в аварийном режиме. Когда остаток доходит до нуля, в разговор отправляется специальный промпт, и агент тратит этот запас на запись состояния для следующего окна. Резерв выделяется только если такой промпт задан.

По сторонним разборам исходников порог считается примерно так: из окна модели вычитается запас под ответ (до 20 000 токенов), затем ещё около 13 000 — остаток и есть точка срабатывания; для окна 200 000 это примерно 167 000 токенов. Это чужая реконструкция, а не документированная формула, и полагаться на неё как на точную не стоит. Там же отмечено, что порог из конфига ограничен сверху примерно 90% окна.

/compact, /clear или /new: три разных способа освободить контекст

Все три «освобождают контекст», и в справочниках их часто подают как синонимы. Разница принципиальная — в англоязычных обсуждениях этот выбор так и называется, compact vs clear.

КомандаЧто помнит агент послеЧто с записью сессииКогда это правильный выбор
/compactвыжимку прошлого разговора: решения, ограничения, следующие шагита же сессия продолжаетсязадача НЕ закончена, а место кончается
/newничего из прошлого чатаначинается новый чат, прошлый остаётся в историизадача закончена, следующая — про другое
/clearничего из прошлого чатановый чат плюс очищенный экран терминалато же, что /new, но вы ещё и не хотите видеть простыню вывода

Правило выбора простое: сжатие — для незаконченной задачи, новый чат — для новой задачи. Официальные практики OpenAI говорят то же самое: /compact — когда переписка разрослась и нужна выжимка прежнего контекста, свежий чат — под новую задачу; вдобавок Codex сжимает разговор и сам.

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

Вернуться в прерванную работу: codex resume, —last и пикер сессий

Сессии Codex сохраняются сами. Каждая — это JSONL-файл (по одной записи на строку) в папке ~/.codex/sessions/ГГГГ/ММ/ДД/ с именем вида rollout-...jsonl; путь к файлу текущей сессии печатает /rollout. Внутри — вся переписка, вызовы инструментов и их вывод.

Способы вернуться:

  1. codex resume --last — открыть последнюю сессию сразу, без выбора;
  2. codex resume — открыть список и выбрать нужную;
  3. codex resume <id> — открыть конкретную сессию, если знаете идентификатор;
  4. /resume — то же самое изнутри уже запущенного Codex;
  5. codex exec resume — продолжить неинтерактивный запуск, это нужно для скриптов и CI.

Две детали, из-за которых люди решают, что «сессия пропала». Первая: по умолчанию показываются чаты текущего репозитория — сессия из другой папки в списке не появится, для этого есть флаг --all. Вторая: отдельной команды вида codex session list в CLI нет, список живёт в пикере; сторонние утилиты, которые парсят ту же папку и показывают историю плоским списком с поиском, люди пишут именно поэтому.

Важно понимать, что именно восстанавливается. Не «память» модели — сохранённого внутреннего состояния у неё нет. Восстанавливается запись разговора, из которой контекст собирается заново. Отсюда две вещи: возвращение в очень длинную сессию сразу занимает много контекста (иногда сжатие срабатывает почти сразу после возврата — на это в трекере есть отдельная жалоба), а сама сессия после возврата дописывается в тот же файл.

Fork вместо resume: когда нужна вторая попытка, а не продолжение

Обе операции открывают старую сессию, но делают разное:

  • resume — продолжение той же линии: новые ходы дописываются в тот же файл, история одна;
  • fork — новая ветка от выбранной точки: оригинал остаётся нетронутым;
  • /side (алиас /btw) — одноразовая ветка для побочного вопроса; внутри неё доступен только небольшой набор команд вроде /diff, /status и /export.

Правило: если вы собираетесь попробовать иначе — берите fork. Иначе неудачный эксперимент навсегда останется в рабочей записи задачи, и через месяц по ней будет непонятно, что вы в итоге сделали, а что отменили. Форкнуть текущий чат можно и на ходу: codex fork --last снаружи, /fork изнутри.

Откат правок Codex: почему отменяет их git, а не агент

Это место расходится с русскоязычными гидами. Два популярных руководства предлагают включить в конфиге undo = true в блоке [features] и пользоваться командой /undo.

На 11 августа 2026 это не работает. В реестре функций Codex ключ undo помечен как удалённый и оставлен «совместимости ради, чтобы старые конфиги продолжали читаться»; при разборе конфига этот ключ просто пропускается — без предупреждения. Команды /undo в перечне нет. Просьба вернуть её открыта в трекере с 14 января 2026, отдельная заявка просит добавить откат к контрольной точке.

Вторая ловушка — двойной Esc. Он открывает предыдущее сообщение на правку и позволяет отвести ветку разговора с этой точки. Это откат переписки, а не файлов: в протоколе Codex так и написано — сброс последних ходов из контекста не пытается вернуть изменения в файловой системе, отменять правки на диске обязан клиент. То есть чат вы отмотали, а код на диске остался новым.

Что вы хотите отменитьЧем это делается
последние сообщения в разговоредвойной Esc (правка предыдущего сообщения и ветка от него)
правки в отслеживаемых файлахgit restore <файл> или git checkout .
файлы, которые агент создалgit clean -fd (сначала посмотрите git clean -nd)
весь набор правок задачивернуться к своему коммиту-чекпойнту

Рабочая процедура, которая делает длинную сессию безопасной:

  1. Коммит перед задачей. Пусть даже с сообщением «чекпойнт»: это ваша единственная кнопка отмены.
  2. /diff вместо доверия. Команда показывает git-диф вместе с файлами, которых git ещё не знает, — именно там всплывают неожиданно созданные файлы.
  3. Мелкие коммиты по ходу. Каждый рабочий этап — коммит; тогда «откатить» означает вернуться на один шаг, а не потерять час.
  4. Ничего важного вне git. Незакоммиченный черновик документа в папке проекта — это то, что нечем восстановить: именно с такими историями и приходят в трекер.

Как дробить длинную работу на сессии и не терять контекст

Дисциплина стоит дешевле, чем героическое спасение сессии на 3% остатка. Порядок, который работает:

  1. Одна сессия — одна задача. Закончили — /new. Формулировка задачи при этом важна не меньше, чем управление сессией: об этом отдельный урок про то, как ставить задачи Codex.
  2. Цель — в /goal. Для работы на несколько часов у цели есть собственный бюджет токенов, то есть это механизм для агента, а не пометка для человека.
  3. Итоги — в файл. Короткий NOTES.md или запись в задачнике: что сделано, что решено, что дальше. Это то, что переживёт сжатие и станет входом в следующую сессию.
  4. Коммит на каждом этапе. Он же чекпойнт отката.
  5. Побочные вопросы — в /side. Не тащите «а как работает эта функция» в основную линию задачи.
  6. Переименовать и заархивировать. /rename даёт сессии человеческое имя, /archive убирает её из списка, оставляя запись на диске.

Ещё одна причина не копить сессии: файл записи остаётся на диске и хранит всё, включая вывод команд. Вымарывание секретов и токенов из показанных команд и из воспроизводимой истории добавили только в версии 0.147.0 от 7 августа 2026 — записи, сделанные раньше, чище не станут. Если в переписку попало лишнее, архивирование не поможет: архив не равен удалению, и для удаления есть /delete и codex delete (необратимо, вместе с ветками субагентов).

Риски длинной сессии Codex: что ломается по жалобам трекера

Картина по обращениям в репозитории проекта на 11 августа 2026. Номера в таблице — это заявки пользователей, и часть из них уже закрыта (то есть починена или признана дублем): по датам видно, что жалобы идут с марта по июль 2026, поэтому симптом полезно знать, даже если конкретную заявку закрыли.

СимптомЧто известноЧто делать
Агент отвечает на более ранний запросissue #19116: у порога сжатия сессия подвисает, при очень больших окнах агент берётся за старое состояние задачипрервать ход (Esc), проверить /status, начать новый чат с итогом в файле
Сжатие идёт по кругу часамиissue #14120 (CLI 0.112): Codex сжимает раз за разом; по описанию автора заявки после каждого сжатия остаётся около 12% контекстаостановить, /new, задачу отдать меньшими кусками
Сжатие срабатывает сразу после возвратаissue #29426 в приложении Codex: короткая возобновлённая сессия сжимается, хотя окно почти пустоене возвращаться в самые длинные сессии — форкнуть или начать заново с заметкой
Сжатие нельзя отменить и оно тормозитissue #24372 и #24432 в приложении Codex: авто-сжатие занимает до минутыпланировать сжатие самому, не доводя до автоматического
После сжатия теряется ход работыissue #29356: просят сохранять последние операционные шаги дословновести файл с состоянием, не надеясь на выжимку
Окно «урезали»issue #34926 и #32806: рабочих 258k вместо заявленного миллионасчитать по /status, а не по рекламным цифрам модели

Есть и обратная сторона: конец окна не обрывает работу молча — сначала приходит напоминание с остатком токенов, затем резервируется запас на аварийную заметку. А сама возможность работать через несколько окон подряд заявлена OpenAI как обученная способность модели: она сжимает сессию у предела окна, получает чистое окно и продолжает, пока задача не будет закончена. Это заявление вендора, а не наш замер, но продуктовая часть под него сделана — /compact, /resume, /fork, /goal и запись сессий на диск.

FAQ

Как продолжить прерванную сессию Codex CLI?

Запустите codex resume --last — откроется последняя сессия. Если нужна не последняя, наберите codex resume и выберите из списка, а изнутри уже запущенного Codex — команду /resume. По умолчанию показываются чаты текущего репозитория; чтобы увидеть сессии из других папок, добавьте флаг --all. Восстанавливается запись разговора, из которой контекст собирается заново.

Можно ли отменить правки, которые сделал Codex?

Средствами агента — нет. Команду /undo убрали, а ключ undo = true в конфиге теперь молча игнорируется, хотя часть руководств всё ещё советует его включить. Двойной Esc откатывает только переписку: в протоколе прямо сказано, что изменения на диске он не возвращает. Рабочий откат — гитом: коммит-чекпойнт перед задачей, затем git restore для изменённых файлов и git clean -fd для созданных.

Чем /compact отличается от /clear и /new?

/compact оставляет выжимку разговора и продолжает ту же сессию — это выбор для незаконченной задачи. /new начинает новый чат: прошлый контекст агент не помнит, запись остаётся в истории. /clear делает то же, что /new, и вдобавок чистит экран терминала. Правило простое: сжатие — для продолжения работы, новый чат — под новую задачу.

Можно ли увеличить контекстное окно Codex через config.toml?

Нет. Ключ model_context_window существует, но заданное значение обрезается по максимуму модели — берётся меньшее из двух. Поднять окно выше модельного нельзя, занизить можно (иногда полезно, чтобы сжатие срабатывало раньше). Реальный размер окна и порог сжатия смотрите командами /status и /debug-config, а не по рекламным цифрам модели.

Где лежат файлы сессий Codex и как их удалить?

Записи хранятся как JSONL-файлы в ~/.codex/sessions/ГГГГ/ММ/ДД/, путь к текущей печатает /rollout. Внутри вся переписка вместе с выводом запущенных команд. Архивирование не удаляет файл — оно убирает сессию из списка. Для удаления есть /delete изнутри и codex delete снаружи; операция необратима и уносит ветки субагентов.

Что делать, если Codex сжимает контекст по кругу?

Это известное поведение: в трекере есть обращение о том, что сжатие повторяется часами, так и не доходя до правок. Прервите ход клавишей Esc, посмотрите /status, выпишите текущее состояние работы в файл и начните новый чат командой /new, отдав задачу более мелкими частями. Тянуть такую сессию дальше дороже, чем начать заново с заметкой.

Курс «OpenAI Codex: агентный кодинг» · модуль «Метод работы». Полная программа и два маршрута обучения — на странице курса.

Предыдущий урок: Codex CLI против Codex Cloud: где решать задачу

Bybit
$30,100 + $5,030
100 USDT в подарок
Получить →
Поделиться
Связаться:
Крипто- и data-аналитик, инженер-программист (факультет компьютерных наук ХНУРЭ). В IT с 2008 года: администрировал корпоративный мониторинг в «Vodafone Украина», семь лет разрабатывал и продвигал веб-проекты, пять лет руководил маркетингом на метриках — конверсия, CTR, ROI, LTV.Криптовалютными рынками занимаюсь с 2021 года: ончейн-метрики, токеномика, макроэкономические индикаторы. Разработал собственную data-driven модель анализа рынка на 30+ метрик. Стек — Python (pandas, NumPy, SciPy, matplotlib), математическая статистика и EDA; сбор и сверку данных автоматизирую AI-агентами.Принцип — «Don't trust, verify»: каждая цифра проверена по первоисточнику, ключевые — минимум по двум независимым; прогнозы — только сценарии с условиями. Тезис без данных не публикуется.