Вайбкодинг2026-09-137 минРедакция Submarine School

Codex скрипт: безопасная пакетная автоматизация через exec

Codex скрипт: безопасная пакетная автоматизация через exec

Codex скрипт удобен, когда одну и ту же понятную операцию нужно выполнить для нескольких файлов, каталогов или задач. Для этого подходит не интерактивное окно терминала, а команда codex exec: она запускает Codex из сценария, позволяет ограничить права и сохранить проверяемый результат. Ниже показан безопасный процесс для локального репозитория, где каждое задание изолировано и следующий шаг не начинается после ошибки.

Если вам нужен обычный диалог и визуальная проверка изменений, основной путь для большинства задач это десктопное приложение ChatGPT с Codex. CLI здесь выбран намеренно: пакетный запуск должен работать без интерактивного интерфейса и отдавать результат следующему шагу сценария.

Когда нужен именно пакетный скрипт

Пакетный режим подходит для повторяемых задач с одинаковыми границами: проверить набор модулей, подготовить однотипные правки, собрать отчёты по каталогам или прогнать независимые задания из списка. OpenAI описывает codex exec как неинтерактивный режим для сценариев, конвейеров и задач, где вывод передаётся другим инструментам. Прогресс идёт в stderr, а финальное сообщение выводится в stdout, поэтому эти потоки можно обрабатывать отдельно. Это закреплено в официальной документации неинтерактивного режима.

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

Правило выбора простое: автоматизируйте не действие, а уже проверенный процесс с ясным входом, ожидаемым выходом и условием остановки.

Автоматизация полезна, когда вы понимаете границы задачи и умеете проверить итог. На вебинаре вы соберёте первый рабочий проект с ИИ по понятному процессу.

Занять место

Карта результата перед запуском

До сценария зафиксируйте карту процесса. Исходная ситуация: Git-репозиторий и независимые задачи. Результат: отдельный отчёт для каждой задачи. Шаги: проверить репозиторий, запустить Codex, сверить ответ, diff и тесты. Частые сбои: неверный путь, невалидный JSON, ошибка тестов. Ограничение: сценарий не принимает продуктовые решения. Неподходящий случай: необратимые действия без отдельного подтверждения.

Завершившаяся команда ещё не доказывает, что задача решена. В приёмке проверяйте ответ агента, фактический diff и тесты. Подготовка безопасной рабочей копии подробнее разобрана в материале Codex и GitHub: работа с репозиторием.

По теме: Codex: сохранение сессии и продолжение работы в 2026

Подготовьте входные задания и схему ответа

Создайте файл tasks.txt, где одна строка содержит одно законченное задание. Не кладите туда пароли, ключи API и команды публикации. Хорошее задание называет область изменений, критерий готовности и запрет на расширение границ. Например: исправить конкретную проверку в указанном модуле, запустить связанный тест, не менять публичный интерфейс.

Для ответа используйте JSON Schema. Флаг --output-schema просит Codex вернуть финальный объект по заданной схеме, а --output-last-message или короткий вариант -o записывает финальное сообщение в файл. Эти возможности описаны в [документации codex exec](https://developers.openai.com/codex/noninteractive). Схема ниже требует явный статус, список затронутых файлов, выполненные проверки и описание блокера.

{
  "type": "object",
  "properties": {
    "status": {"enum": ["ok", "blocked"]},
    "changed_files": {"type": "array", "items": {"type": "string"}},
    "checks": {"type": "array", "items": {"type": "string"}},
    "blocker": {"type": "string"}
  },
  "required": ["status", "changed_files", "checks", "blocker"],
  "additionalProperties": false
}

Сначала проверьте сценарий без права записи

По умолчанию codex exec работает только на чтение. Сделайте так первый проход: попросите назвать ожидаемые файлы и проверки без правок. Если план вышел за разрешённую область, остановитесь. Для применения OpenAI рекомендует выдавать минимальные права и включать --sandbox workspace-write только когда нужна запись в рабочую папку.

  1. Откройте чистую рабочую ветку и выполните git status --short. Если есть чужие незавершённые изменения, не запускайте пакетный сценарий поверх них.
  2. Проверьте одну строку из tasks.txt обычным codex exec без флага записи. Сравните предложенный план с границами задания.
  3. Убедитесь, что schema.json разбирается командой jq empty schema.json и папка .codex-batch/results не содержит старых файлов с теми же именами.
  4. Только после ручной проверки одного задания включите --sandbox workspace-write для применения внутри репозитория.

Не добавляйте --dangerously-bypass-approvals-and-sandbox ради удобства. Официальный справочник Codex рекомендует для автоматической локальной работы --sandbox workspace-write. Флаг --skip-git-repo-check тоже оставляйте осознанным исключением для заранее изолированной среды.

Пакетный запуск экономит повторяющиеся действия, но ценность появляется только вместе с приёмкой результата. На вебинаре вы разберёте, как превращать задачу в работающий сайт, бота или приложение и получите гайд в подарок.

Записаться на вебинар

Соберите сценарий с остановкой при первой ошибке

Ниже безопасный каркас для независимых заданий. Он пропускает пустые строки, создаёт отдельный файл результата, прекращает работу при ненулевом коде codex exec, проверяет итоговый JSON и не продолжает цепочку при статусе blocked. Команда git diff --check ловит проблемы с пробелами и конфликтными маркерами, но не заменяет тесты проекта.

#!/usr/bin/env bash
set -Eeuo pipefail

mkdir -p .codex-batch/results
n=0
while IFS= read -r task || [[ -n "$task" ]]; do
  [[ -z "${task// }" ]] && continue
  n=$((n + 1))
  out=".codex-batch/results/task-${n}.json"

  prompt="Выполни только это задание: ${task}. Не публикуй и не коммить. Запусти относящиеся к изменению проверки."
  codex exec --sandbox workspace-write \
    --output-schema ./schema.json \
    --output-last-message "$out" \
    "$prompt"

  jq -e '.status == "ok"' "$out" >/dev/null
  git diff --check
done < tasks.txt

Сохраните файл как run-codex-batch.sh, выполните chmod +x run-codex-batch.sh и начните с одного задания. После каждого успешного шага сохраняйте diff или работайте в отдельной ветке. Не поручайте сценарию автоматический git push, развёртывание или удаление резервных копий.

По теме: Codex Sol: что это и когда выбирать модель GPT-5.6

Как проверять результат каждого задания

Приёмка состоит из четырёх ворот: JSON соответствует схеме, changed_files сверяется с git status --short и git diff --name-only, профильные тесты проходят, смысл изменения проверен человеком. Если ответ говорит ok, а файл изменён вне разрешённой области, доверяйте diff и останавливайте сценарий.

  • Вход проверяем: задание конкретно, область файлов названа, секретов в строке нет.
  • Права ограничены: запись разрешена только в рабочей папке, сеть и внешние сервисы не нужны без отдельного решения.
  • Выход проверяем: JSON читается, статус известен, фактические файлы совпадают с отчётом.
  • Качество проверяем: git diff --check, профильные тесты и ручной просмотр ключевого изменения завершились успешно.
  • Остановку проверяем: ошибка команды или blocked действительно обрывает цикл и не запускает следующее задание.

Диагностика по симптому

При сбое не перезапускайте весь список вслепую. Ненулевой код codex exec означает незавершённую задачу. Невалидный JSON указывает на проблему формата. Несовпадение changed_files и diff делает отчёт ненадёжным. Ошибка теста проваливает приёмку даже при статусе ok. Другие причины собраны в статье об ошибках Codex.

  1. Сохраните текущий файл результата и вывод ошибки, не затирайте их новым запуском.
  2. Выполните git status --short и git diff --name-only, чтобы увидеть изменённые и новые файлы.
  3. Если изменения частичные, просмотрите diff и откатите только свой подтверждённый пакет штатным способом Git. Не удаляйте чужую работу.
  4. Исправьте причину в задании, правах или проверке и повторите только остановившуюся строку.
  5. Продолжайте список лишь после того, как повторный запуск прошёл все ворота приёмки.

По теме: Папки Codex: как открыть проект и разделить файлы

Ограничения и работа с учётными данными

Не передавайте ключ в tasks.txt, промпте или журнале. OpenAI не советует задавать OPENAI_API_KEY или CODEX_API_KEY на уровне задания CI, которое запускает код репозитория: код и хуки могут прочитать переменную. В доверенном окружении ограничьте ключ процессом Codex. Файл ~/.codex/auth.json защищайте как пароль. См. аутентификацию неинтерактивного режима.

Пакетный сценарий не подходит для платежей, публикаций, массового удаления и миграций без отката. Автоматически готовьте план, а внешнее действие оставляйте за явным подтверждением.

Частые вопросы

Можно ли запускать несколько заданий параллельно?

Можно только для независимых рабочих копий, которые не меняют общие файлы. Для первого сценария безопаснее последовательный цикл: причина сбоя видна сразу, а изменения проще сопоставить с заданием.

Нужен ли флаг --json, если уже есть --output-schema?

Не обязательно. --output-schema задаёт форму финального ответа, а --json превращает поток событий stdout в JSONL. Подключайте --json, когда системе нужны промежуточные события; для простого сценария достаточно финального файла через -o. Различие описано в официальной документации OpenAI.

Почему нельзя продолжать после проваленного теста?

Следующие задания могут опереться на уже сломанное состояние репозитория. Остановка сохраняет границу: один пакет, один diff, одна причина ошибки.

Можно ли запускать сценарий вне Git-репозитория?

Codex проверяет наличие Git-репозитория как защитную границу. Есть флаг --skip-git-repo-check, но используйте его только в заранее изолированной папке с понятным содержимым и резервной копией, а не как стандартную настройку.

Что делать, если нужен только отчёт без правок?

Оставьте режим по умолчанию без --sandbox workspace-write, сохраните финальный ответ через -o и проверяйте его схемой. Это самый узкий и понятный вариант автоматизации.

На бесплатном вебинаре вы разложите задачу на проверяемые шаги и соберёте проект с ИИ, который можно развивать без хаотичных пакетных правок.

Записаться на вебинар
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место