Модуль 3 · Основы работы · урок 12 из 15
Сессии: продолжить, ответвить, вернуться
Задачи редко укладываются в один присест. Вечером вы останавливаетесь посреди отладки, утром хотите продолжить с того же места. Или на середине понимаете, что стоит попробовать другой подход, но и текущий жалко терять. Для этого в Codex есть сохранённые сессии, ветвление и возврат к ранним сообщениям.
Сессии сохраняются сами
Каждый интерактивный чат Codex автоматически сохраняет локально — вместе с историей сообщений и действий агента. Закрыли терминал по Ctrl+C — сессия никуда не делась.
Вернуться можно из терминала:
codex resume # список сохранённых чатов на выбор
codex resume --last # последний чат из текущего каталога
codex resume --all # выбор среди чатов из любых каталогов
codex resume task-1234 # по имени или IDОбратите внимание: --last по умолчанию ищет только среди чатов текущего каталога. Если вы запускаете codex resume --last из другой папки, получите не тот чат, которого ждали, — добавьте --all или перейдите в нужный каталог.
Внутри уже открытого Codex то же самое делает команда /resume: она загружает историю выбранного чата, не меняя оригинал.
Если каталог сессии отличается от текущего, Codex спросит, в каком работать. Чтобы не отвечать каждый раз, задайте в конфигурации tui.resume_cwd значение "current" или "session".
Имена
Список из двадцати безымянных чатов бесполезен. Давайте сессиям имена по задачам:
/rename task-1234-utm-crmМожно назвать чат сразу при создании: /new task-1235-phone-validation. Удобная договорённость — имя ветки и имя сессии совпадают: тогда по git branch сразу понятно, какой чат продолжать.
Ответвление: /fork
Иногда посреди работы хочется попробовать другой путь: «а если не править существующий сервис, а сделать отдельный?» Если сделать это в том же чате, история смешается, и вернуться к исходному варианту будет трудно.
Команда /fork копирует текущий чат в новый с отдельным ID. Оригинал остаётся нетронутым, и вы можете вести оба варианта. Если Codex предложит выбор, можно продолжить в текущем каталоге или в отдельном git worktree — второе удобно, когда оба варианта будут менять одни и те же файлы. Подробнее о worktree — в уроке «Несколько задач параллельно».
Ответвить можно и сохранённую сессию:
codex fork # выбрать сессию из списка
codex fork --last # ответвить последнююДокументация советует ответвляться, только когда работа действительно расходится. Если задача та же, оставайтесь в одном чате — так сохраняется ход рассуждений.
Вернуться к раннему сообщению
Частая ситуация: вы дали неудачную постановку, агент ушёл не туда, и следующие три хода — попытки его вернуть. Вместо того чтобы спорить дальше, вернитесь к точке ошибки.
Нажмите Esc дважды при пустом поле ввода. Codex предложит отредактировать ваше предыдущее сообщение и ответвит чат от этой точки. Неудачная ветка останется в истории, а вы продолжите с исправленной постановкой и чистым контекстом.
Важно понимать границу: возврат к сообщению меняет историю разговора, но не откатывает изменения в файлах. То, что агент уже успел поменять в рабочей копии, останется. Файлы откатывайте средствами git — об этом урок «Git как страховка».
Временный чат: /side
Нужно что-то уточнить, не засоряя основной чат: «что делает этот флаг Gradle?», «есть ли очевидный риск в этом плане?». Команда /side открывает временный побочный чат, отдельный от основного. Основной продолжает работу, а его статус остаётся виден. Закончили — возвращаетесь.
Порядок в списке
/archive(илиcodex archive <имя>из терминала) — убрать сессию из списков, не удаляя историю. Вернуть —codex unarchive./delete— удалить сессию насовсем вместе с историей. Пользуйтесь осознанно./export notes.md— выгрузить разговор в markdown-файл. Полезно, чтобы приложить ход исследования к задаче или показать коллеге, как агент пришёл к решению./recap— краткое изложение текущего разговора, без сжатия контекста. Удобно, когда вернулись к сессии через пару дней./copyили Ctrl+O — скопировать последний ответ.
На macOS и Windows можно продолжить текущий чат в десктопном приложении ChatGPT командой /app.
Привычки для длинных задач
Сохранённая сессия — не замена записям. Чем дольше чат, тем больше в нём сжатых и потерянных деталей (урок «Контекст»). Поэтому:
- В конце дня просите агента записать состояние. «Запиши в
NOTES.md: что сделано, что осталось, какие решения приняли, какие команды запускать». Утром новая сессия начнётся с чтения этого файла, а не с попыток восстановить контекст из длинной истории. - Новый этап — новый чат. Исследование закончили и записали выводы — реализацию можно начать в свежей сессии.
- Не держите сессию «на всякий случай». Задача закрыта, MR влит — архивируйте.
Отдельно Codex хранит историю ваших промптов — в файле $CODEX_HOME/history.jsonl. Если вы работаете с конфиденциальными данными и не хотите хранить историю, её можно отключить ключом persistence = "none" в разделе [history] файла config.toml.
Сессии есть и у неинтерактивного режима: codex exec resume продолжает задачу в скрипте. Это тема урока «Продолжение и ветвление сессий в скриптах».
Попробуйте сами
10–15 мин на рабочем месте- Назовите текущий чат командой
/rename, выйдите по Ctrl+C и вернитесь черезcodex resumeс этим именем. - Посреди задачи сделайте
/forkи попробуйте в новом чате альтернативный подход. Сравните результаты и оставьте лучший. - Отправьте заведомо неудачное сообщение, затем вернитесь к нему через двойной Esc и исправьте постановку.
Коротко
- Чаты сохраняются автоматически;
codex resume --lastпродолжает последний чат из текущего каталога. - Давайте сессиям имена по задачам:
/rename,/new <имя>. /fork— другой подход без потери текущего; двойной Esc — вернуться к своему сообщению и ответвиться.- Возврат в истории не откатывает файлы — для этого git.
/side— побочный вопрос,/export— выгрузка,/archive— убрать из списка.- Для длинных задач записывайте состояние в файл, а не надейтесь на историю.