
Codex — это облачный агент для программирования, созданный OpenAI. Он способен выполнять несколько задач параллельно: исправлять ошибки, реализовывать новые функции, предлагать улучшения и многое другое. Более того, Codex может создавать pull request’ы на таких платформах, как GitHub.
Хотя Codex уже хорошо работает с PHP — предлагает качественные варианты кода и улучшения, — его самая мощная особенность в том, что он может запускать ваш код (например, выполнять набор тестов), чтобы убедиться, что предлагаемые им изменения действительно работают. Это радикально меняет подход к работе для языков вроде Python или JavaScript, где поддержка выполнения кода присутствует изначально.
Для PHP, однако, выполнение кода по умолчанию не поддерживается. В этой статье объясняется, как настроить Codex для эффективной работы с приложениями на PHP и Symfony, включая запуск тестов и автоматическую проверку изменений.
На момент публикации этой статьи Codex доступен только пользователям ChatGPT Plus ($20 в месяц) и Pro ($200 в месяц); для пользователей бесплатного тарифа он недоступен.
Настройка среды
Перейдите на сайт chatgpt.com/codex и следуйте инструкциям на экране, чтобы подключить Codex к вашим репозиториям GitHub. Вы увидите, какие репозитории можно импортировать напрямую, а для каких потребуется одобрение администратора, если у вас только ограниченные права доступа.
Прежде чем Codex сможет работать с репозиторием, нужно создать для него отдельную среду. Среда задаёт параметры того, как Codex будет взаимодействовать с вашим кодом.
Откройте страницу chatgpt.com/codex/settings/environments и нажмите кнопку «Create environment». Каждая среда привязана к одному репозиторию GitHub, поэтому для каждого репозитория потребуется своя собственная среда.
В разделе Basic выберите организацию GitHub и репозиторий, в котором находится ваш проект на PHP/Symfony:
В разделе Code execution настройте следующие параметры:
Образ контейнера (Container image): Задачи Codex выполняются внутри Docker-контейнера. Сейчас доступен только универсальный образ, предоставляемый Codex; поддержка пользовательских образов появится позже. Список предустановленных пакетов для универсального образа можно найти в документации.
Переменные окружения и секреты (Environment variables и Secrets): эти параметры интуитивно понятны; подробнее о них рассказывается далее в статье.
Скрипт настройки (Setup script): особенно важен для проектов на PHP/Symfony. С его помощью устанавливаются PHP, Composer и другие необходимые инструменты, которых нет в стандартном образе. Полный пример приведён ниже.
Доступ агента к интернету (Agent internet access): по умолчанию отключён. Включайте его только при острой необходимости (например, для загрузки зависимостей). Даже OpenAI рекомендует держать эту опцию выключенной. Вместо этого используйте скрипт настройки для предварительной загрузки всего необходимого — как показано ниже.
Скрипт настройки
Скрипт настройки выполняется в начале каждой задачи, сразу после клонирования репозитория. На этом этапе вы можете подготовить среду для разработки и тестирования PHP/Symfony. Доступ к интернету всегда включён во время выполнения этого скрипта, поэтому здесь можно установить все необходимые зависимости, даже если позже интернет будет отключён.
Ниже приведён полный пример скрипта, который я использую для приложений на Symfony. После того как вы сохраните настройки среды, нажмите «Connect interactive terminal», чтобы протестировать и отладить скрипт в том самом контейнере, который Codex будет использовать для задач.
#!/usr/bin/env bash
# this makes the script strict:
# -e: exit on any error
# -u: error on undefined variables
# -o pipefail: exit if any command in a pipeline fails
set -euo pipefail
# Adds a package repository that provides the latest PHP versions
# (see https://deb.sury.org/ for details)
add-apt-repository -y ppa:ondrej/php
# Updates package lists to get the latest information about available packages
apt-get update
# Install PHP 8.4 and extensions commonly needed for Symfony applications
apt-get install -y \
php8.4 \
php8.4-cli \
php8.4-mbstring \
php8.4-xml \
php8.4-intl \
php8.4-gd \
php8.4-zip \
php8.4-curl \
php8.4-pgsql # this is for PostgreSQL; change this if you use MySQL
# This makes PHP 8.4 available through the global 'php' binary,
# which is expected by many commands
update-alternatives --install /usr/bin/php php /usr/bin/php8.4 84
update-alternatives --set php /usr/bin/php8.4
# Install Composer as a global 'composer' binary following the safest practices
EXPECTED_CHECKSUM="$(curl -fsSL https://composer.github.io/installer.sig)"
curl -fsSL https://getcomposer.org/installer -o composer-setup.php
ACTUAL_CHECKSUM="$(sha384sum composer-setup.php | cut -d ' ' -f 1)"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
echo 'ERROR: Invalid composer installer checksum.' >&2
rm composer-setup.php
exit 1
fi
php composer-setup.php --install-dir=/usr/local/bin --filename=composer --quiet
rm composer-setup.php
# Install the PHP dependencies of your project;
# private packages require some more work explained later in this article
composer install
# Show installed versions to check if everything worked
php -v
composer --version
Приватные пакеты Composer
Если ваш проект зависит от приватных пакетов Composer (например, размещённых на GitHub), потребуется авторизовать Composer.
- Создайте персональный access token: это может быть как классический токен, так и токен с гибкими правами доступа. Назовите его, например, «OpenAI Codex» и предоставьте ему права только на чтение приватных репозиториев.
- Добавьте токен в Codex: откройте настройки среды Codex, прокрутите до раздела Secrets и нажмите «Add +». Назовите секрет
COMPOSER_AUTH
. Значением должен быть элемент в формате JSON с ранее созданным токеном. Формат такой же, как в файле~/.composer/auth.json
, но всё должно быть записано в одну строку. Например:
{"github-oauth":{"github.com": "ghp_fs2dWqUilbS0NBeJaWBw3QgIucTO5RyrXV1e"}}
При необходимости вы можете добавить в скрипт настройки проверку, чтобы убедиться, что этот секрет задан:
#!/usr/bin/env bash
set -euo pipefail
# the script will fail if this env var / secret is not set
: "${COMPOSER_AUTH:?}"
# ...
Использование баз данных
Если для вашего набора тестов требуется база данных (например, MySQL или PostgreSQL), её нужно установить и настроить в скрипте настройки. Вот как это сделать:
Сначала определите следующие переменные окружения: POSTGRES_USER
, POSTGRES_PASSWORD
и POSTGRES_DB
. Для локальных тестовых баз данных можно использовать фиктивные значения. Убедитесь, что они совпадают со значениями, указанными в опции DATABASE_DSN
вашего приложения Symfony.
Затем добавьте эти строки в начало скрипта, чтобы убедиться, что переменные действительно определены:
#!/usr/bin/env bash
set -euo pipefail
# make sure the required env vars are defined
: "${COMPOSER_AUTH:?}"
: "${POSTGRES_USER:?}"
: "${POSTGRES_PASSWORD:?}"
: "${POSTGRES_DB:?}"
# ...
Далее установите PostgreSQL:
# Update package lists
# ...
# Install PostgreSQL
apt-get install -y --no-install-recommends postgresql-16
# Install PHP and common extensions
# ...
Запустите PostgreSQL и создайте пользователя и базу данных:
# Install Composer
# ...
# Install dependencies
# ...
# Start PostgreSQL
pg_dropcluster --stop 16 main || true
pg_createcluster --start -u postgres 16 main
# Create the PostgreSQL user and database
su postgres -c "createuser -s \"${POSTGRES_USER}\""
su postgres -c "psql -c \"ALTER USER \\\"${POSTGRES_USER}\\\" WITH PASSWORD '${POSTGRES_PASSWORD}';\""
su postgres -c "createdb -O \"${POSTGRES_USER}\" \"${POSTGRES_DB}\""
# (Optional) Verify that the user can log in
# psql -U $POSTGRES_USER -d $POSTGRES_DB
# Show installed versions
# ...
psql --version
Общие настройки
Перед запуском первой задачи перейдите на страницу chatgpt.com/codex/settings/general, чтобы настроить глобальные параметры, применяемые ко всем проектам:
Пользовательские инструкции (Custom instructions): используются для настройки поведения Codex, например: «Всегда используй английский язык для кода, комментариев, коммитов и названий веток», «Используй лаконичные названия веток с префиксами feat- или bug-» и т.д.
Формат веток (Branch format): по умолчанию используется codex/{feature}, но вы можете изменить его на {feature} или любой другой формат.
Предоставление метаданных агентам
Хотя это необязательно, добавление файлов с метаданными может значительно улучшить понимание и навигацию по вашему коду для таких агентов, как Codex. Эти текстовые файлы описывают, как запускать тесты, какие соглашения использовать и многое другое. При наличии хороших метаданных вы получите более точные результаты и меньше ошибок.
Пока что универсального стандарта нет, поэтому для каждого агента нужен отдельный файл. В своих проектах я использую:
<project-root>/AGENTS.md
для ChatGPT Codex<project-root>/CLAUDE.md
для Claude AI<project-root>/.github/copilot-instructions.md
для GitHub Copilot
Все три файла обычно содержат одну и ту же информацию. Вы можете создать один файл и использовать симлинки для остальных. Claude также поддерживает импорт файлов с помощью:
See @AGENTS.md
Вы можете посмотреть реальный пример файла AGENTS.md, который я использую в одном из своих проектов. По мере выполнения задач обновляйте этот файл, добавляя новые инструкции, чтобы Codex не повторял одни и те же ошибки.
Рекомендации по безопасности и конфиденциальности
Кроме отключения доступа агента к интернету (Agent internet access), рекомендуется проверить настройки конфиденциальности по адресу chatgpt.com/codex/settings/data:
-
Улучшение модели (Model improvement): включено по умолчанию. Разрешает OpenAI использовать ваш код для обучения и совершенствования своих моделей.
-
Включить среды (Include environments): позволяет OpenAI использовать настройки вашей среды Codex для дальнейшего обучения моделей.
Заключение
По умолчанию ChatGPT Codex не поддерживает выполнение PHP-кода, что ограничивает его возможности. Однако с правильной настройкой вы сможете полностью автоматизировать задачи в проектах на Symfony и PHP.
После настройки Codex становится не просто ревьюером, а настоящим ассистентом по программированию: он понимает ваш стек и самостоятельно проверяет свои изменения.
Попробуйте!
Этот текст является переводом статьи: How to Make ChatGPT Codex Work with PHP and Symfony
UPD от 2025-06-16:
Я поигрался с Codex на своих проектах - https://github.com/prikotov/moex-mcp-server и https://github.com/prikotov/t-invest-mcp-server. Впечатления от Codex положительные. Конечно, есть ощущение, что какие-то вещи я сделал бы руками быстрее. Но я вспоминаю, как это бывает с новыми разработчиками в команде: сначала кажется, что проще сделать самому, чем делегировать. Однако разум подсказывает, что делегирование - и новичкам, и ИИ - в долгосрочной перспективе приносит больше пользы. Это помогает выстроить эффективное взаимодействие и повышает общую продуктивность команды.