СейчасЧто такое codex exec
- Что такое codex exec
- Вход по подписке без API-ключа
- Базовое использование
- Права доступа и песочница
- Машиночитаемый вывод
- Продолжение начатой задачи
- Полезные сценарии
- Расписание без CI-сервера
- Генерация контента: сценарии видео и короткие новости
- Почему exec подходит для контент-конвейера
- Короткая новость из источника
- Сценарий видео по строгой схеме
- Ежедневный поток материалов
- Лимиты подписки и когда нужен ключ
- Ограничения и когда не подходит
- Проверка результата
- Чеклист «Что делать, если…»
- Ссылки
Практическое руководство по codex exec — неинтерактивному режиму Codex CLI, который выполняет одну поставленную задачу и возвращает результат в терминал, файл или следующую команду. Данные проверены по официальной документации Codex 27.07.2026.
codex exec по умолчанию использует сохранённую авторизацию Codex CLI. Если вы вошли через ChatGPT, локальные запуски идут по лимитам подписки, и отдельный API-ключ для них не нужен.Что такое codex exec
Codex CLI умеет работать в двух режимах. Интерактивный открывает терминальный интерфейс, где вы ведёте диалог с агентом. Неинтерактивный запускается командой codex exec, получает задачу одной строкой и завершается, отдав финальный ответ.
Официальная документация называет три ситуации, когда нужен именно exec: запуск внутри пайплайна (CI, предмердж-проверки, регулярные задания), получение вывода, который можно передать другим инструментам, и запуск с заранее заданными настройками песочницы и подтверждений.
Пока команда работает, прогресс уходит в stderr, а в stdout попадает только финальное сообщение агента. Поэтому результат легко перенаправить в файл или следующую команду.
Вход по подписке без API-ключа
Codex поддерживает два способа входа: через аккаунт ChatGPT и через API-ключ. Codex CLI работает с обоими, а codex exec по умолчанию переиспользует уже сохранённые данные входа.
Практическая последовательность для работы по подписке:
- Установите Codex CLI и выполните
codex login. Откроется браузер, после входа токен вернётся в CLI. - Если машина без графической оболочки или локальный колбэк заблокирован, используйте вход по коду устройства:
codex login --device-auth. - Проверьте остаток лимитов внутри активной сессии CLI командой
/status, а полную картину — в дашборде использования Codex. - Запускайте задачи через
codex exec. Отдельный ключ подставлять не нужно.
Вход кэшируется локально: в файле ~/.codex/auth.json или в системном хранилище учётных данных. Поведение задаётся параметром cli_auth_credentials_store со значениями file, keyring или auto.
~/.codex/auth.json содержит токены доступа. Относитесь к нему как к паролю: не коммитьте в репозиторий, не пересылайте в чатах и не прикладывайте к тикетам.Базовое использование
Задача передаётся одним аргументом:
codex exec "опиши структуру репозитория и назови 5 самых рискованных мест"Результат можно сразу сохранить:
codex exec "собери release notes по последним 10 коммитам" | tee release-notes.mdЕсли сессионные файлы на диске не нужны, добавьте --ephemeral:
codex exec --ephemeral "проведи триаж репозитория и предложи следующие шаги"Когда данные приходят из другой команды, промпт остаётся инструкцией, а поток stdin становится дополнительным контекстом:
npm test 2>&1 \
| codex exec "суммируй упавшие тесты и предложи минимальную правку" \
| tee test-summary.mdЕсли промпт целиком генерируется скриптом или лежит в файле, укажите явный признак чтения из stdin:
cat prompt.txt | codex exec -Права доступа и песочница
По умолчанию codex exec работает в режиме только чтения. Права повышаются явно:
| Команда | Что разрешено | Когда применять |
codex exec "<задача>" | Чтение файлов, без правок | Аудит, ревью, отчёты, триаж логов |
codex exec --sandbox workspace-write "<задача>" | Правки внутри рабочей директории | Автофиксы, генерация файлов, рефакторинг |
codex exec --sandbox danger-full-access "<задача>" | Полный доступ | Только изолированное окружение: контейнер или отдельный раннер |
Флаг --full-auto сохранён как устаревшая совместимость и выводит предупреждение. В новых скриптах используйте явный --sandbox workspace-write.
Дополнительные флаги для управляемых запусков: --ignore-user-config пропускает config.toml из CODEX_HOME, --ignore-rules пропускает пользовательские и проектные файлы .rules. Команда требует запуск внутри Git-репозитория, а --skip-git-repo-check снимает это ограничение, если вы уверены в безопасности окружения.
Машиночитаемый вывод
Для скриптов и дашбордов есть три уровня формализации результата.
Поток событий. Флаг --json превращает stdout в поток JSON Lines: каждая строка — отдельное событие. Типы событий включают thread.started, turn.started, turn.completed, turn.failed, item.* и error. Внутри item.* приходят сообщения агента, рассуждения, запуски команд, изменения файлов, вызовы MCP-инструментов, веб-поиски и обновления плана.
codex exec --json "опиши структуру репозитория" | jqТолько финальное сообщение. Флаг -o <путь> (он же --output-last-message) пишет финальный ответ в файл и одновременно печатает его в stdout.
Строгая схема. Флаг --output-schema требует, чтобы финальный ответ соответствовал JSON Schema. Это нужный вариант, когда результат уходит в следующий шаг пайплайна и поля должны быть стабильными.
{
"type": "object",
"properties": {
"project_name": { "type": "string" },
"programming_languages": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["project_name", "programming_languages"],
"additionalProperties": false
}codex exec "Extract project metadata" \
--output-schema ./schema.json \
-o ./project-metadata.jsonПродолжение начатой задачи
Двухшаговый сценарий не требует пересказывать контекст заново. Первый запуск исследует проблему, второй продолжает ту же сессию:
codex exec "проверь изменения на состояния гонки"
codex exec resume --last "исправь найденные состояния гонки"Можно указать конкретную сессию: codex exec resume <SESSION_ID>.
Полезные сценарии
| Задача | Команда | Что получаете |
| Разбор упавших тестов | npm test 2>&1 \| codex exec "суммируй падения и предложи минимальную правку" | Короткий отчёт вместо простыни логов |
| Триаж логов сервера | tail -n 200 app.log \| codex exec "назови вероятную причину и три следующих шага" > log-triage.md | Файл с гипотезой и планом проверки |
| Разбор сетевой ошибки | curl -vv https://api.example.com/health 2>&1 \| codex exec "объясни сбой TLS или HTTP и предложи вероятную причину" | Объяснение без ручного чтения хендшейка |
| Апдейт для команды | gh run view <RUN_ID> --log \| codex exec "напиши короткий апдейт по падению CI" | Готовый текст для мессенджера |
| Комментарий в pull request | gh run view <RUN_ID> --log \| codex exec "суммируй падение в 5 пунктах" \| gh pr comment <PR> --body-file - | Комментарий публикуется одной командой |
| Release notes | codex exec "собери release notes по последним 10 коммитам" \| tee release-notes.md | Черновик заметок к релизу |
| Метрики проекта в JSON | codex exec "собери метаданные проекта" --output-schema ./schema.json -o ./meta.json | Стабильные поля для следующего шага автоматизации |
| Локальный автофикс | codex exec --sandbox workspace-write "исправь падающий тест, не трогая другие файлы" | Правка в рабочей копии, которую вы проверяете сами |
Расписание без CI-сервера
Локальный планировщик закрывает часть задач, для которых обычно поднимают отдельный пайплайн. Пример ежедневного отчёта через cron:
# Ежедневно в 9:00: сводка изменений за сутки в файл с датой
0 9 * * * cd /path/to/repo && /usr/local/bin/codex exec \
"собери сводку коммитов за последние 24 часа: что изменилось и на что смотреть первым" \
-o "/path/to/reports/$(date +%F).md" >> /path/to/logs/codex-cron.log 2>&1Запуск идёт под вашей сохранённой авторизацией, поэтому расходуются лимиты подписки, а не платные API-токены.
Генерация контента: сценарии видео и короткие новости
Отдельный класс задач — материалы, которые собираются по шаблону из внешнего источника: короткая новость по пресс-релизу, подводка к посту, описание к видео, сценарий вертикального ролика. Структура у них предсказуемая, поэтому такие тексты удобно производить неинтерактивным запуском: на входе источник, на выходе файл, который забирает следующий шаг конвейера.
Почему exec подходит для контент-конвейера
- Задача формулируется один раз и дальше повторяется без человека в терминале.
- Источник передаётся через
stdin, поэтому один промпт обслуживает любое количество материалов. --output-schemaфиксирует поля результата, и рендер видео или запись в CMS не ломается из-за того, что модель поменяла формат ответа.-oкладёт готовый результат по нужному пути, а--jsonдаёт разбор события за событием, когда запуск надо диагностировать.
Короткая новость из источника
cat source-article.txt \
| codex exec "Сделай короткую новость на 900–1200 знаков по этому источнику. Только факты из текста, без оценок и прогнозов. Если даты или цифры в источнике нет, не подставляй её. В конце добавь строку SOURCE_UNCLEAR, если чего-то не хватает для новости." \
-o "content/news/$(date +%F)-draft.md"Маркер вроде SOURCE_UNCLEAR даёт скрипту простой признак для ручной проверки: строка есть — материал уходит на доработку, строки нет — черновик идёт дальше.
Сценарий видео по строгой схеме
Схема описывает то, что нужно следующему шагу производства. Файл video-scene.schema.json:
{
"type": "object",
"properties": {
"title": { "type": "string" },
"total_duration_sec": { "type": "number" },
"scenes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"index": { "type": "number" },
"duration_sec": { "type": "number" },
"voiceover": { "type": "string" },
"on_screen_text": { "type": "string" },
"visual_prompt": { "type": "string" }
},
"required": ["index", "duration_sec", "voiceover", "on_screen_text", "visual_prompt"],
"additionalProperties": false
}
}
},
"required": ["title", "total_duration_sec", "scenes"],
"additionalProperties": false
}Запуск:
cat brief.md \
| codex exec "Собери сценарий вертикального ролика на 45 секунд по этому брифу: 5–7 сцен, разговорная озвучка, короткий текст на экране" \
--output-schema ./video-scene.schema.json \
-o ./scenes.jsonПолученный scenes.json дальше разбирается по полям: voiceover уходит в синтез речи, visual_prompt — в генерацию кадров, duration_sec задаёт монтажную сетку. Модель при этом не решает, каким будет формат данных: за это отвечает схема.
Ежедневный поток материалов
Папка входящих источников плюс планировщик закрывают регулярный выпуск без CI-сервера:
# Каждое утро в 8:00: превратить все входящие источники в черновики новостей
0 8 * * * cd /srv/content && for f in inbox/*.txt; do \
cat "$f" | /usr/local/bin/codex exec \
"Сделай короткую новость по источнику, только факты из текста" \
-o "drafts/$(basename "$f" .txt).md"; \
done >> logs/news.log 2>&1Если агент должен сам раскладывать файлы по структуре проекта, переименовывать их и обновлять индексные страницы, добавьте --sandbox workspace-write. Для одного файла результата хватает -o.
codex exec не проверяет достоверность источника. В контент-конвейере это означает два обязательных правила: промпт запрещает добавлять факты, которых нет во входных данных, а публикация остаётся отдельным шагом с проверкой человеком. Автоматическая генерация экономит время на сборке текста, а не на ответственности за факты./status, чтобы утренний поток не упирался в пятичасовое окно.Лимиты подписки и когда нужен ключ
Codex включён в планы ChatGPT: Free, Go, Plus, Pro, Business, Edu и Enterprise. Лимиты локальных сообщений и облачных задач считаются в общем пятичасовом окне, дополнительно могут действовать недельные ограничения. Точные значения зависят от плана и модели, поэтому проверяйте их в дашборде использования Codex и через /status.
Что делать при упоре в лимит по официальным правилам:
- на Plus и Pro докупить кредиты и продолжить без смены плана;
- на Business, Edu и Enterprise с гибкой тарификацией купить кредиты рабочего пространства;
- перейти на более компактную модель, чтобы лимитов хватило на дольше;
- запускать дополнительные локальные задачи с API-ключом, тогда они считаются по тарифам API.
Если для одного запуска нужен другой ключ, он передаётся только этой команде:
CODEX_API_KEY=<api-key> codex exec --json "разбери открытые баг-репорты"Переменная CODEX_API_KEY поддерживается только в codex exec.
OPENAI_API_KEY или CODEX_API_KEY как переменную окружения уровня job в workflow, который выкачивает или запускает код из репозитория. Скрипты сборки, тесты, хуки зависимостей и скомпрометированный сторонний action прочитают эти значения. Для GitHub Actions используйте официальный openai/codex-action, который поднимает прокси к Responses API.Ограничения и когда не подходит
- Автоматизация в публичных и открытых репозиториях под аккаунтом ChatGPT не рекомендуется: авторизационный файл слишком чувствителен для такого окружения.
- Режим
danger-full-accessза пределами изолированного окружения превращает любую ошибку промпта в реальные изменения системы. - Работа вне Git-репозитория требует явного отключения проверки, что снимает защиту от разрушительных правок.
- Если у включённого MCP-сервера стоит
required = trueи он не инициализировался,codex execзавершится с ошибкой вместо продолжения без этого сервера. Для пайплайна это ожидаемое поведение, но его нужно учитывать в обработке кодов возврата. - Инструкции из файлов проекта вроде
AGENTS.mdчитаются как доверенная конфигурация, поэтому запускатьexecв чужом непроверенном репозитории небезопасно.
Проверка результата
Минимальный сценарий, который подтверждает, что всё настроено:
- Перейдите в любой Git-репозиторий.
- Выполните
codex exec "перечисли файлы верхнего уровня и назови стек проекта". - Признак успеха: в терминал печатается финальный ответ агента, а прогресс шёл отдельным потоком и не смешался с результатом.
- Выполните
codex exec --json "перечисли файлы верхнего уровня" | jqи убедитесь, что приходит валидный поток событий сthread.startedиturn.completed. - Проверьте расход: в интерактивной сессии
codexнаберите/status.
Если первые два шага проходят без ввода API-ключа, значит запуск идёт по вашей подписке.
Чеклист «Что делать, если…»
- Ответ пришёл, но без правок в файлах — режим по умолчанию только читает, добавьте
--sandbox workspace-write. - Команда отказывается стартовать вне репозитория — либо перейдите в репозиторий, либо осознанно добавьте
--skip-git-repo-check. - Скрипт не может распарсить вывод — переходите с текстового ответа на
--jsonили на--output-schemaсо строгой схемой. - Нужен только финальный текст — используйте
-o <путь>вместо разбора всего потока. - Браузерный вход не открывается на сервере — используйте
codex login --device-auth. - Лимиты кончились в середине работы — докупите кредиты, смените модель на более компактную или выполните запуск с
CODEX_API_KEYдля одной команды. - Нужно продолжить прошлую задачу —
codex exec resume --last "<следующий шаг>". - Локальный конфиг мешает воспроизводимости — добавьте
--ignore-user-configи при необходимости--ignore-rules.
Ссылки
- Non-interactive mode — официальная документация по codex exec
- Authentication — способы входа в Codex
- Codex Pricing — лимиты планов и кредиты
- Дашборд использования Codex
- openai/codex-action — запуск Codex в GitHub Actions
По теме
Неинтерактивный режим полезен там, где рутинные проверки и отчёты пора снять с человека и оставить ему только решение. Это касается и небольших команд, у которых нет выделенного инженера под автоматизацию.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.