Перейти к содержимому
TelegramGitHub

Codex 101

Этот курс — практическое руководство по Codex, AI-агенту для кода от OpenAI. Курс сделан для инженеров данных, BI-разработчиков и аналитиков. Мы начнём с установки и настройки, а потом перейдём к реальным задачам: dbt, SQL, Airflow, ревью кода и автоматизация в CI.

Официальная документация Codex: learn.chatgpt.com/docs. Старые ссылки developers.openai.com/codex теперь ведут туда же.

Данные актуальны на ноябрь 2026 года. Codex обновляется почти каждую неделю. Если команда из курса не работает, проверьте документацию и список изменений.

  • Вы пишете SQL, dbt-модели, пайплайны на Python или DAG в Airflow.
  • Вы хотите, чтобы агент делал рутинную работу, а вы проверяли результат.
  • Вы уже знаете Git и умеете работать в терминале.

Если вы проходили наш курс Claude Code 101, многое будет знакомо. Все современные агенты устроены похоже. В Модуле 12 есть таблица соответствия.

  • Компьютер с macOS, Linux или Windows
  • Аккаунт ChatGPT (план Plus или выше) или API-ключ OpenAI
  • Git-репозиторий, с которым будете работать. Лучше начать с учебного проекта, а не с рабочего
Доступ из России

OpenAI официально не работает в России. Использование сервиса из неподдерживаемой страны может привести к блокировке аккаунта (список стран). Учитывайте это, особенно для рабочих задач. Альтернативы описаны в курсе Claude Code 101, Модуль 10 — например, китайские модели и OpenCode.

МодульТема
1Что такое Codex
2Установка и первый запуск
3Безопасность: песочница и разрешения
4Настройка: config.toml и AGENTS.md
5Как ставить задачи
6Практика: задачи инженера данных
7Расширения: MCP, Skills, субагенты, хуки
8Параллельная работа и облако
9Ревью кода и автоматизация в CI
10Лимиты и стоимость
11Лучшие практики и частые ошибки
12Codex и Claude Code

Codex — AI-агент для разработки от OpenAI. Он читает ваш проект, пишет и меняет код, запускает команды и тесты, делает ревью. Вы ставите задачу обычным языком, а Codex выполняет её по шагам.

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

  1. Читает файлы проекта
  2. Планирует изменения
  3. Меняет код
  4. Запускает команды: тесты, линтер, dbt compile
  5. Смотрит на результат и исправляет ошибки
  6. Повторяет, пока задача не готова

Ваша роль меняется. Вы ставите задачу, задаёте правила и проверяете результат.

У Codex несколько «поверхностей». Все они используют один аккаунт и одни настройки.

ГдеЧто этоКогда удобно
CLIАгент в терминале. Открытый код (Apache-2.0)Основная работа с кодом, скрипты, CI
Расширение для IDEVS Code, Cursor, Windsurf. В JetBrains и Xcode — через их встроенные интеграцииРабота в привычном редакторе
Приложение ChatGPTДесктоп для macOS, Windows, Linux. Параллельные чаты, worktree, задачи по расписаниюНесколько задач одновременно
ОблакоЗадачи выполняются на серверах OpenAI, в контейнереДолгие задачи, пока вы заняты другим
GitHub@codex review в комментарии к PR, автоматическое ревьюРевью кода в команде
Slack, LinearЗадача из сообщения или issueКомандная работа
SDK и GitHub Action@openai/codex-sdk, openai/codex-actionСвои инструменты и CI

В этом курсе мы в основном работаем в CLI. Всё, что вы узнаете, работает и в других поверхностях.

Codex работает на моделях семейства GPT-6.

МодельОсобенностьКогда использовать
gpt-6-astraСамая сильнаяСложная архитектура, трудные баги
gpt-6.1-solПочти как Astra, но дешевле. Контекст 500K токеновОсновная работа
gpt-6.1-terraБыстрая (нужен CLI 0.159.0+)Типовые задачи
gpt-6-lunaСамая дешёвая, высокие лимитыПростые задачи, массовые правки

Модели с codex в названии (например, gpt-5.3-codex) больше не используются. GPT-5.5 убрали из Codex для входа через ChatGPT 14 октября 2026 года.

Уровень рассуждений (reasoning effort) — сколько модель «думает» перед ответом:

УровеньКогда
low (в интерфейсе — Light)Простые и чётко описанные задачи
medium, highСложные изменения, отладка
xhigh, maxДолгие автономные задачи
ultraСамые сложные задачи. Codex сам запускает субагентов

Больше рассуждений — лучше качество, но медленнее и дороже. Модель и уровень меняются командой /model.

ПланЦена в месяцЧто даёт
Free, Go$0, $8GPT-6 Luna в приложении (доступ открывают постепенно)
Plus$20CLI, IDE, веб, iOS. Модели Sol и Luna
Pro$100 / $200 / $500Намного больше лимитов, без пятичасового лимита
Business$20–25 за пользователяДля команд
Enterprise, EduПо запросуДля компаний
API-ключОплата за токеныБез облачных функций (ревью в GitHub, Slack)

Подробнее о лимитах — в Модуле 10. Цены меняются — проверяйте на странице цен.

  • Codex — агент: он сам читает код, запускает команды и исправляет ошибки
  • Работает в терминале, IDE, приложении, облаке и GitHub
  • Модели GPT-6: Astra (сильная), Sol (основная), Terra (быстрая), Luna (дешёвая)
  • Для старта достаточно плана Plus

Окно терминала
# macOS и Linux — официальный скрипт (он же обновляет)
curl -fsSL https://chatgpt.com/codex/install.sh | sh
# Или через Homebrew
brew install --cask codex
# Или через npm
npm install -g @openai/codex
# Проверить версию
codex --version
# Обновить
codex update

Windows: Codex работает нативно, со своей песочницей. WSL2 нужен, только если вам нужны Linux-инструменты.

Окно терминала
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"
Окно терминала
# Через браузер — аккаунт ChatGPT (рекомендуется)
codex login
# Сервер без браузера — вход по коду устройства
codex login --device-auth
# Через API-ключ
printenv OPENAI_API_KEY | codex login --with-api-key
СпособПлюсыМинусы
Аккаунт ChatGPTВходит в подписку, есть облако и ревью в GitHubЛимиты плана
API-ключПлатите только за использование, удобно для CIНет облачных функций, можно потратить много

Данные входа хранятся в ~/.codex/auth.json. Это секрет — не коммитьте его и не показывайте агентам.

Окно терминала
cd ~/projects/my-dbt-project
codex

Codex спросит, доверяете ли вы этой папке. Отвечайте «да» только для своих проектов. Для чужих репозиториев — нет. Настройки проекта (.codex/config.toml, хуки) загружаются только в доверенных папках.

Первая задача — пусть Codex изучит проект:

Объясни структуру этого проекта. Какие есть модели dbt, как они связаны,
какие команды нужны для сборки и тестов?

Codex прочитает файлы и ответит. Он ничего не меняет, пока вы не попросите.

Следующий шаг — создать файл инструкций:

/init

Команда создаст AGENTS.md — «README для агента». Подробнее — в Модуле 4.

КомандаЧто делает
/initСоздаёт AGENTS.md для проекта
/modelМеняет модель и уровень рассуждений
/permissionsМеняет режим разрешений
/planРежим планирования: сначала план, потом код
/goalРаботать в цикле, пока цель не достигнута
/reviewРевью изменений
/diffПоказывает изменения в файлах
/statusТекущие настройки и использование лимитов
/usageИспользование лимитов
/compactСжимает историю, когда контекст заполнен
/new, /clearНовый разговор
/resumeВернуться к прошлому разговору
/forkСоздать ветку разговора
/side (или /btw)Быстрый вопрос в стороне от основной задачи
/mentionДобавить файл в контекст
/mcpСписок MCP-серверов
/skillsСписок навыков
/subagentsПереключение между потоками субагентов
/agentsЦентр управления агентами: чаты и агенты на подключённом сервере
/hooksЗагруженные хуки
/importИмпорт настроек из Claude Code или Cursor
/fastБыстрый режим (дороже по лимитам)
/exitВыход

Полный список: learn.chatgpt.com/docs/developer-commands.

КлавишиЧто делает
@Добавить файл в сообщение
!Выполнить shell-команду
Esc Esc (пустое поле)Изменить прошлое сообщение и продолжить с него
Tab во время работыПоставить сообщение в очередь
Enter во время работыДобавить уточнение в текущую задачу
Ctrl+RПоиск по истории
Ctrl+LОчистить экран
КомандаЧто делает
codexИнтерактивный режим
codex "задача"Запуск сразу с задачей
codex exec "задача"Без интерфейса — для скриптов и CI (Модуль 9)
codex resumeПродолжить прошлую сессию
codex reviewРевью без интерфейса
codex cloudОблачные задачи
codex applyПрименить изменения из облачной задачи
codex mcpУправление MCP-серверами
codex appОткрыть десктоп-приложение
codex doctorПроверить установку
  • Установка — одна команда. Вход — через аккаунт ChatGPT
  • Доверяйте только своим папкам
  • Начните с вопроса о проекте и /init
  • Выучите /model, /permissions, /plan, /review, /status

Модуль 3: Безопасность: песочница и разрешения

Заголовок раздела «Модуль 3: Безопасность: песочница и разрешения»

Это главная сильная сторона Codex. По умолчанию все команды выполняются в песочнице — изолированной среде на уровне операционной системы. Изучите этот модуль до того, как дадите агенту реальную работу.

Codex защищает вас двумя независимыми механизмами:

  1. Песочница (sandbox_mode) — что команды могут делать технически
  2. Политика подтверждений (approval_policy) — когда Codex спрашивает вас
РежимЧто можноКогда
read-onlyТолько читать файлыИзучение проекта, ревью, CI
workspace-writeЧитать и менять файлы в папке проекта. Сеть выключенаОбычная работа (по умолчанию в Git-папке)
danger-full-accessВсё, без ограниченийТолько в контейнере или одноразовой VM

Даже в workspace-write папки .git, .codex, .agents и .aws остаются только для чтения.

Как работает песочница:

ОСТехнология
macOSSeatbelt (встроенная песочница macOS)
Linux, WSL2bubblewrap
WindowsНативная песочница Windows
ПолитикаПоведение
on-requestКоманды внутри песочницы — без вопросов. Выход из песочницы или сеть — спрашивает вас
neverНикогда не спрашивает. Что нельзя в песочнице — просто не выполняется
granularТонкая настройка по типам действий

Значения untrusted и on-failure устарели. Если они есть в старом конфиге, удалите их: untrusted может помешать Codex запуститься.

Режим по умолчанию для работы — Auto: workspace-write + on-request. Codex свободно меняет файлы проекта и запускает тесты, но спрашивает разрешение на доступ к сети и файлам вне проекта.

Сменить режим: команда /permissions или флаги при запуске:

Окно терминала
# Только чтение — для изучения чужого кода
codex --sandbox read-only
# Обычная работа
codex --sandbox workspace-write --ask-for-approval on-request

В workspace-write сеть выключена. Поэтому pip install или dbt deps не сработают без разрешения. Варианты:

  • Codex спросит разрешение — подтвердите разово
  • Включить сеть для проекта:
.codex/config.toml
[sandbox_workspace_write]
network_access = true

Веб-поиск по умолчанию работает из кэша (web_search = "cached"). Живой поиск — флаг --search. Результаты из интернета — это непроверенные данные: на странице может быть скрытая инструкция для агента.

Можно поручить проверку опасных действий отдельному агенту-ревьюеру, а не себе:

approvals_reviewer = "auto_review" # по умолчанию "user"

Если ревьюер отклонил нужное действие, команда /approve повторит его один раз.

В июле 2026 года Саймон Уиллисон описал случай: Codex работал в режиме полного доступа, без песочницы и без автоматического ревью. Агент попытался переопределить $HOME и в итоге удалил домашнюю папку пользователя.

Выводы:

  • Не отключайте песочницу на своём компьютере
  • Для полной автономии используйте контейнер или облако
  • Делайте бэкапы и коммитьте часто
Окно терминала
# НЕ делайте так на рабочем компьютере
codex --yolo
# то же самое:
codex --dangerously-bypass-approvals-and-sandbox

Этот флаг отключает и песочницу, и подтверждения. Используйте его только внутри одноразового контейнера, где нечего терять.

РискЧто делать
Агент запустит DROP или DELETE в productionДавайте доступ только к dev-базе. Пользователь БД — только чтение
Секреты в profiles.yml, .envДержите их вне репозитория. Используйте переменные окружения
Агент прочитает персональные данныеРаботайте на тестовых или обезличенных данных
Prompt injection через данные или issueНе давайте агенту сразу доступ к секретам и к непроверенному тексту

Добавьте правило в AGENTS.md:

## Запрещено
- Никогда не запускай команды против production (target: prod).
- Не читай и не меняй profiles.yml, .env, файлы с ключами.
- Миграции — только на dev-базе.
  • Песочница включена по умолчанию — это защищает ваш компьютер
  • Режим Auto (workspace-write + on-request) — хороший выбор для работы
  • Сеть по умолчанию выключена
  • --yolo — только в одноразовом контейнере
  • Агенту — только dev-данные и права на чтение

У Codex два главных файла:

  • config.toml — настройки инструмента: модель, песочница, MCP
  • AGENTS.md — инструкции для агента: как устроен проект и какие правила

Личные настройки — ~/.codex/config.toml. Настройки проекта — .codex/config.toml в репозитории.

~/.codex/config.toml
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = false
# Уведомление, когда задача закончена (любая команда)
notify = ["terminal-notifier", "-title", "Codex", "-message", "Готово"]
# Доверенные проекты
[projects."/Users/me/projects/my-dbt-project"]
trust_level = "trusted"

Если одна настройка задана в нескольких местах, побеждает более высокий уровень:

ПриоритетГдеПример
1 (высший)Флаги командной строкиcodex -m gpt-6-luna, -c model_reasoning_effort=high
2.codex/config.toml в проекте (ближайший к текущей папке)Общие настройки команды
3Файл профиля~/.codex/ci.config.toml
4~/.codex/config.tomlВаши личные настройки
5Управляемые настройки компанииЧерез облако или /etc/codex/config.toml
6 (низший)Встроенные значения—

Настройки проекта загружаются только для доверенных папок. Компания может задать обязательные правила в requirements.toml — их нельзя переопределить.

Профиль — отдельный файл с набором настроек. Например, для CI:

~/.codex/ci.config.toml
model = "gpt-6-luna"
model_reasoning_effort = "low"
approval_policy = "never"
sandbox_mode = "read-only"
Окно терминала
codex exec --profile ci "Проверь SQL в папке models/ на ошибки"

Старый формат [profiles.ci] внутри config.toml в документации больше не описан. Используйте отдельные файлы.

AGENTS.md — открытый стандарт. Его читают Codex, Cursor, Copilot, Antigravity, OpenCode и Claude Code (если нет CLAUDE.md). Один файл — правила для всех агентов в команде.

Как Codex ищет файлы:

  1. Глобальный файл: ~/.codex/AGENTS.override.md, если нет — ~/.codex/AGENTS.md
  2. Потом от корня Git-репозитория до текущей папки — по одному файлу в каждой папке
  3. В каждой папке: сначала AGENTS.override.md, потом AGENTS.md
  4. Файлы склеиваются от корня к текущей папке. Ближайший файл идёт последним, поэтому его правила главнее

Общий лимит — 32 KiB (project_doc_max_bytes). Если у команды уже есть файл с другим именем, добавьте его:

project_doc_fallback_filenames = ["TEAM_GUIDE.md"]
AGENTS.md
## Проект
dbt-проект аналитического хранилища на Snowflake.
- models/staging/ — очистка источников, префикс stg_
- models/intermediate/ — промежуточная логика, префикс int_
- models/marts/ — витрины, префиксы fct_ и dim_
## Команды
- Установка: `uv sync && dbt deps`
- Проверка: `dbt compile --select <модель>`
- Сборка и тесты: `dbt build --select <модель> --target dev`
- Линтер SQL: `sqlfluff lint models/`
## Правила
- Каждый источник объявлен в `_sources.yml` до использования.
- На каждом первичном ключе — тесты `unique` и `not_null`.
- CTE вместо подзапросов. Ключевые слова SQL — в нижнем регистре.
- Таблицы больше 1 млн строк в день — `incremental`.
- У каждой модели есть описание в `.yml`.
## Запрещено
- Никогда не используй `--target prod`.
- Не меняй profiles.yml и файлы с секретами.
- Не удаляй модели без подтверждения.
## Готово, когда
- `dbt build --select <изменённые модели>+` проходит без ошибок.
- `sqlfluff lint` без ошибок.
- Описания и тесты добавлены.
  • Начните с /init, потом отредактируйте руками
  • Коротко. Это не документация проекта, а инструкция для агента
  • Обязательно укажите команды сборки, тестов и линтера. Без них агент не может себя проверить
  • Добавляйте правила по опыту. Агент дважды сделал одну ошибку — добавьте правило
  • Длинные инструкции — в отдельные файлы. Например, docs/code_review.md, а в AGENTS.md — ссылка
  • В монорепозитории — свой AGENTS.md в каждой большой папке: dbt/AGENTS.md, airflow/AGENTS.md

Можно попросить Codex самого улучшить файл:

Ты дважды забыл добавить тесты на первичный ключ. Сделай ретроспективу:
почему так вышло, и предложи правку в AGENTS.md, чтобы это не повторилось.
  • config.toml — настройки инструмента, AGENTS.md — правила проекта
  • Приоритет: флаги → проект → профиль → пользователь → компания
  • Профили — отдельные файлы ~/.codex/<имя>.config.toml
  • В AGENTS.md главное — команды проверки и критерии «готово»

Качество работы агента зависит от постановки задачи. Хорошая задача похожа на хороший тикет в Jira.

OpenAI рекомендует такую структуру:

ЧастьЧто написатьПример
ЦельЧто нужно сделатьДобавить витрину выручки по дням
КонтекстКакие файлы, ошибки, документы важны@models/staging/stg_orders.sql, текст ошибки
ОграниченияПравила и рамкиНе меняй существующие модели, только incremental
Готово, когдаКак проверить результатdbt build проходит, тесты добавлены

Плохо:

Сделай витрину по выручке

Хорошо:

Цель: создай модель fct_daily_revenue — выручка по дням и странам.
Контекст: источник — @models/staging/stg_orders.sql и @models/staging/stg_payments.sql.
Выручка = сумма payments.amount для заказов со статусом 'completed'.
Ограничения:
- materialized='incremental', ключ — order_date
- не меняй staging-модели
Готово, когда:
- dbt build --select fct_daily_revenue --target dev проходит
- есть тесты unique и not_null на (order_date, country)
- есть описание модели и колонок в .yml

Для сложных задач сначала попросите план. Включите /plan. Codex изучит код и предложит план, но ничего не будет менять.

Полезный приём — попросите Codex задать вам вопросы:

/plan Нужно перенести 15 моделей из Redshift в Snowflake.
Прежде чем предлагать план, задай мне вопросы о том, что тебе неясно.
Оспорь мои предположения, если видишь риски.

Для долгих задач попросите сохранить план в файл PLANS.md. Агент будет отмечать выполненные шаги. Если сессия прервётся, новая сессия продолжит по плану.

/goal запускает Codex в цикле: он работает, пока сам не решит, что цель достигнута.

/goal Все тесты в tests/ проходят, и dbt build --target dev без ошибок.

Используйте с осторожностью: долгий цикл тратит много лимитов. Цель должна быть проверяемой — тест, команда, конкретный результат.

Контекст — это «рабочая память» агента. Когда он переполнен, качество падает.

СитуацияЧто делать
Новая задача/new — начните новый разговор
Разговор стал длинным/compact — сжать историю
Хотите попробовать другой подход/fork — ветка разговора
Быстрый вопрос в стороне/side — не засоряет основной разговор
Вернуться к вчерашней задаче/resume или codex resume

Правило: один разговор — одна задача. Не ведите весь проект в одном чате.

ЗадачаМодельУровень
Переименовать колонку во всех моделяхLunalow
Написать новую dbt-модель с тестамиSolmedium
Найти причину расхождения в цифрахSolhigh
Спроектировать новый слой хранилищаAstrahigh
Перенести проект на другую СУБДSol или Astraxhigh + /plan
  • Задача = цель + контекст + ограничения + «готово, когда»
  • Сложное — сначала /plan, долгое — с PLANS.md
  • /goal — для проверяемых целей
  • Один разговор — одна задача

Модуль 6: Практика: задачи инженера данных

Заголовок раздела «Модуль 6: Практика: задачи инженера данных»

В этом модуле — готовые сценарии. Копируйте промпты и адаптируйте под свой проект.

Создай модель int_customer_orders: для каждого клиента — число заказов,
сумма, дата первого и последнего заказа.
Источники: @models/staging/stg_customers.sql, @models/staging/stg_orders.sql.
Добавь тесты и описание в .yml. Проверь через dbt build --select int_customer_orders --target dev.

На что смотреть при проверке:

  • Правильный ли JOIN (не теряются ли клиенты без заказов?)
  • Правильное ли зерно (одна строка на клиента?)
  • Существуют ли колонки, которые использует агент

Агент может написать правдоподобный SQL с несуществующими колонками или неверным JOIN. Поэтому в AGENTS.md обязательно должна быть команда dbt compile или dbt build — агент сам увидит ошибку.

/plan Проверь @models/marts/fct_sales.sql:
- есть ли проблемы с производительностью
- нет ли дублей из-за JOIN
- соответствует ли стилю из AGENTS.md
Предложи изменения, но не меняй файл, пока я не одобрю план.

Например, перенос с Redshift на Snowflake.

  1. Сначала используйте детерминированный конвертер, если он есть. Например, SnowConvert для Snowflake
  2. Потом поручите Codex то, что конвертер не смог:
/plan Мы переносим модели из папки models/legacy_redshift/ на Snowflake.
SnowConvert уже обработал синтаксис. Найди оставшиеся проблемы:
DISTKEY/SORTKEY, функции дат, GETDATE(), NVL2, разницу в типах.
Создай PLANS.md со списком моделей и статусом каждой.
Переноси по одной модели и после каждой запускай dbt build --select <модель> --target dev.
  1. Сравните данные: попросите агента написать запросы для сверки числа строк и сумм между старой и новой системой
Создай DAG dags/daily_sales.py:
- запуск каждый день в 06:00 UTC
- шаги: загрузка из S3 → dbt build --select tag:daily → проверка свежести данных
- TaskFlow API, retries=2
- подключения только через Airflow Connections, никаких паролей в коде
Проверь синтаксис через python -c "import dags.daily_sales".
Вот лог упавшей задачи: @logs/dbt_run_2026-11-02.log
Найди причину. Сначала объясни, что пошло не так, потом предложи исправление.
Не меняй файлы, пока я не подтвержу.

Если причина в данных, а не в коде, Codex должен это сказать. Попросите его написать SQL-запрос, который покажет проблемные строки.

В папке data/ лежит events.parquet. С помощью DuckDB:
1. Покажи схему и число строк
2. Найди дубли по event_id
3. Посчитай события по дням за последний месяц
4. Сохрани скрипт анализа в analysis/events_check.py

DuckDB работает без сервера, поэтому Codex справится в песочнице. Если DuckDB не установлен, понадобится сеть для установки — Codex спросит разрешение.

Для всех моделей в models/marts/ без описания:
- добавь описание модели и всех колонок в .yml
- описание бери из логики SQL, не выдумывай
- если смысл колонки неясен — оставь TODO и выпиши список в конце
Для модели fct_orders добавь проверки качества:
- уникальность order_id
- amount >= 0
- order_date не в будущем
- каждый customer_id есть в dim_customers
Используй стандартные тесты dbt и dbt_utils, где можно.
Окно терминала
codex --sandbox read-only
Я новый человек в команде. Объясни:
1. Откуда приходят данные и куда уходят
2. Какие модели самые важные (на них больше всего ссылок)
3. Где самая сложная логика
4. Какие есть проблемы и технический долг
Нарисуй схему потоков данных в формате Mermaid.

Режим read-only гарантирует, что агент ничего не изменит.

  • Codex хорош для dbt-моделей, SQL-ревью, миграций, DAG и документации
  • Всегда давайте агенту способ проверить себя: dbt build, тесты, линтер
  • Проверяйте JOIN, зерно и названия колонок — тут агенты ошибаются чаще всего
  • Для изучения кода — режим read-only

Модуль 7: Расширения: MCP, Skills, субагенты, хуки

Заголовок раздела «Модуль 7: Расширения: MCP, Skills, субагенты, хуки»

MCP (Model Context Protocol) — стандарт подключения агентов к внешним системам: базам данных, dbt, GitHub, документации.

Окно терминала
# Добавить локальный сервер
codex mcp add context7 -- npx -y @upstash/context7-mcp
# Добавить удалённый сервер
codex mcp add docs --url https://example.com/mcp
# Вход через OAuth
codex mcp login docs
# Список
codex mcp list

Или в config.toml:

# MCP-сервер dbt
[mcp_servers.dbt]
command = "uvx"
args = ["dbt-mcp"]
env = { DBT_PROJECT_DIR = "/Users/me/projects/my-dbt-project" }
startup_timeout_sec = 20

Полезные MCP-серверы для данных:

СерверЧто даёт
dbt MCPМодели, lineage, запуск dbt
MCP Toolbox for DatabasesBigQuery, PostgreSQL и другие базы
ClickHouse MCPЗапросы к ClickHouse
Snowflake managed MCPSQL, Cortex Search, Cortex Analyst
GitHub MCPIssues, PR

Совет: начните с 1–2 серверов. Каждый сервер занимает место в контексте и расходует лимиты. Подключайте базу пользователем только с правами на чтение.

Skill — папка с инструкцией SKILL.md и, при желании, скриптами. Это повторяемый рабочий процесс, который агент выполняет по запросу.

Правило: если вы третий раз пишете один и тот же промпт — сделайте из него skill.

Где хранятся:

ГдеДля кого
.agents/skills/ в репозиторииВся команда
~/.agents/skills/Только вы
/etc/codex/skills/Все пользователи компьютера (администратор)

Пример — .agents/skills/dbt-new-model/SKILL.md:

---
name: dbt-new-model
description: Создание новой dbt-модели по стандартам команды. Используй, когда просят создать модель, витрину, staging или intermediate.
---
# Новая dbt-модель
1. Определи слой: staging (stg_), intermediate (int_) или mart (fct_/dim_).
2. Проверь, что источники объявлены в _sources.yml.
3. Напиши SQL по стилю из AGENTS.md: CTE, нижний регистр.
4. Добавь в .yml: описание модели и колонок, тесты unique и not_null на ключ.
5. Запусти: dbt build --select <модель> --target dev
6. Если тест упал — исправь и запусти снова.
7. В конце покажи: путь к файлам, зерно модели, список тестов.

Вызвать skill:

  • Явно: $dbt-new-model создай витрину возвратов
  • Через меню: /skills
  • Автоматически: Codex сам выберет skill по описанию. Поэтому пишите в description ключевые слова

Встроенные skills: $skill-creator (создаёт новый skill) и $skill-installer (ставит готовые). Готовые skills для dbt публикует dbt Labs: dbt-agent-skills.

Субагент — отдельный агент со своей ролью, моделью и инструкциями. Главный агент поручает ему часть работы. Это экономит контекст главного агента.

Встроенные: default, worker, explorer. Свои — TOML-файлы в .codex/agents/ или ~/.codex/agents/:

.codex/agents/sql-reviewer.toml
name = "sql-reviewer"
description = "Ревью SQL и dbt-моделей: ошибки JOIN, зерно, производительность, стиль."
model = "gpt-6.1-terra"
model_reasoning_effort = "medium"
developer_instructions = """
Ты ревьюер SQL в команде данных.
Проверь: дубли из-за JOIN, правильность зерна, фильтры по датам,
NULL в ключах, производительность на больших таблицах.
Не меняй файлы. Верни список проблем с файлом и строкой.
"""

Как запустить — попросите обычными словами:

Запусти двух субагентов sql-reviewer параллельно: один проверяет models/marts/,
второй — models/intermediate/. Собери их замечания в одну таблицу.

Субагент не может переопределить песочницу, политику подтверждений и MCP-серверы — они наследуются от главной сессии.

Хук — команда, которая автоматически выполняется при событии. Например, запуск линтера после правки файла или блокировка опасной команды.

Где хранятся: ~/.codex/hooks.json, .codex/hooks.json в проекте (только для доверенных папок) или секция [hooks] в config.toml.

События: SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, PreCompact, PostCompact, SubagentStart, SubagentStop, Stop и другие.

Формат: событие → matcher (регулярное выражение по имени инструмента) → список команд. Если команда завершается с кодом 2, действие блокируется, а текст из stderr получает агент.

{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "sqlfluff lint models/ --format github-annotation-native || true",
"timeout": 60,
"statusMessage": "Проверяю SQL линтером"
}
]
}
]
}
}

Посмотреть загруженные хуки — команда /hooks. Точные имена инструментов для matcher и все поля — в документации по хукам.

Плагин — способ поделиться набором skills, MCP-серверов и хуков. Команды: codex plugin и codex plugin marketplace. Ставьте плагины только из проверенных источников: плагин может запускать любые команды.

  • MCP — доступ к dbt, базам, GitHub. Начните с 1–2 серверов
  • Skills — повторяемые процессы в .agents/skills/. Вызов — $имя
  • Субагенты — TOML в .codex/agents/, для ревью и параллельных задач
  • Хуки — автоматические проверки, код 2 блокирует действие

Самый большой выигрыш от агента — когда вы не ждёте его, а делаете несколько задач параллельно.

Если два агента меняют одни файлы в одной папке, они мешают друг другу. Решение — git worktree: отдельная копия рабочей папки на своей ветке.

Окно терминала
git worktree add ../my-project-revenue -b feature/revenue
cd ../my-project-revenue
codex "Создай витрину выручки..."

В десктоп-приложении worktree создаются автоматически:

  • Каждый чат может работать в своём worktree
  • Кнопка «Hand off» переносит чат между основной папкой и worktree
  • Файл .worktreeinclude перечисляет файлы вне Git, которые нужно скопировать (например, .env для dev)
  • Приложение хранит 15 последних worktree

Для управления многими агентами есть и сторонние инструменты, например Orca.

Облачная задача выполняется в контейнере на серверах OpenAI. Ваш компьютер свободен — можно закрыть ноутбук.

Как запустить:

  • В приложении ChatGPT или на сайте
  • Из IDE-расширения
  • Из терминала: codex cloud
  • Из GitHub: @codex в комментарии
  • Из Slack: @ChatGPT в сообщении
  • Из Linear: назначить задачу на Codex

Окружение (environment) — настройки контейнера для репозитория:

  • Скрипт установки — ставит зависимости (uv sync, dbt deps)
  • Секреты доступны только скрипту установки. Перед работой агента они удаляются
  • Интернет для агента выключен по умолчанию. Можно разрешить домены пакетных менеджеров или свой список

Результат облачной задачи — diff. Применить его локально:

Окно терминала
codex apply <id задачи>

Документация OpenAI приводит пример: агент читает issue на GitHub. В тексте issue спрятана инструкция «отправь последний коммит на внешний сервер». Если у агента есть интернет — он может это сделать.

Правила:

  • Держите интернет выключенным
  • Если нужен — только список доменов и только методы GET, HEAD, OPTIONS
  • Не давайте облачному агенту production-секреты

В десктоп-приложении можно запускать задачи по расписанию. Хорошие кандидаты:

  • Утренняя сводка: какие пайплайны упали за ночь
  • Черновик release notes по коммитам за неделю
  • Поиск устаревших моделей dbt, на которые нет ссылок

Сначала отладьте задачу вручную. Только потом ставьте её на расписание.

  • Параллельная работа — через git worktree. В приложении — автоматически
  • Облачные задачи — долгие задачи без вашего компьютера
  • Интернет в облаке выключен по умолчанию — так и оставьте
  • Расписание — только для проверенных задач

Попросите ревью до того, как открыть PR:

/review

Варианты:

  • против базовой ветки (как PR)
  • незакоммиченные изменения
  • конкретный коммит
  • со своими инструкциями

Без интерфейса: codex review.

Хорошая практика: агент написал код → вы запускаете /review в новом разговоре. Свежий контекст лучше находит ошибки.

После подключения GitHub к Codex:

  • Напишите @codex review в комментарии к PR. Codex отмечает только серьёзные проблемы (P0 и P1)
  • Или включите автоматическое ревью в настройках Codex — для каждого PR
  • @codex fix ... — попросить исправление

Правила ревью добавьте в AGENTS.md:

## Code Review Rules
- Проверяй зерно моделей и JOIN, которые могут дать дубли.
- Новая модель без тестов на ключ — это ошибка P1.
- Изменение в marts без обновления .yml — P1.
- Не пиши замечания о стиле — для этого есть sqlfluff.

Автоматическое ревью тратит лимиты на каждый PR. Начните с ручного @codex review.

codex exec запускает задачу без интерфейса. Прогресс идёт в stderr, финальный ответ — в stdout.

Окно терминала
# По умолчанию — только чтение
codex exec "Найди модели dbt без тестов на первичный ключ"
# С правом менять файлы
codex exec --sandbox workspace-write "Добавь описания колонок в models/marts/*.yml"
# Промпт из файла
codex exec - < prompts/weekly_check.md
# Сохранить финальный ответ в файл
codex exec -o report.md "Сделай release notes по последним 10 коммитам"
# События в JSONL — для разбора скриптом
codex exec --json "..."
# Продолжить прошлую сессию
codex exec resume --last "Теперь исправь найденные проблемы"
ФлагЧто делает
--sandboxread-only (по умолчанию), workspace-write, danger-full-access
--ask-for-approval, -aПолитика подтверждений
-o, --output-last-messageЗаписать финальный ответ в файл
--output-schemaОтвет строго по JSON-схеме
--jsonПоток событий в JSONL
--ephemeralНе сохранять сессию
--skip-git-repo-checkРазрешить запуск вне Git-репозитория
--profileИспользовать профиль

Флаг --full-auto больше не поддерживается. Вместо него — --sandbox workspace-write. В старых статьях встречаются флаги --approval-mode и --sandbox-permissions — они тоже устарели.

--output-schema заставляет Codex вернуть JSON по схеме. Это удобно, если результат читает скрипт.

{
"type": "object",
"properties": {
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"file": { "type": "string" },
"line": { "type": "integer" },
"priority": { "type": "integer", "minimum": 0, "maximum": 3 },
"title": { "type": "string" },
"body": { "type": "string" }
},
"required": ["file", "line", "priority", "title", "body"],
"additionalProperties": false
}
},
"overall_correctness": { "type": "string", "enum": ["patch is correct", "patch is incorrect"] }
},
"required": ["findings", "overall_correctness"],
"additionalProperties": false
}
Окно терминала
codex exec --sandbox read-only \
--output-schema review-schema.json \
-o review.json \
- < prompts/review.md

Официальное действие — openai/codex-action. Рекомендуемая схема — два job:

  1. Codex работает с правами только на чтение и возвращает текст
  2. Отдельный job без API-ключа публикует комментарий

Так ключ и права на запись никогда не встречаются в одном месте.

.github/workflows/codex-review.yml
name: Codex PR review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
message: ${{ steps.codex.outputs.final-message }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
persist-credentials: false
- id: codex
uses: openai/codex-action@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
prompt-file: .github/codex/prompts/review.md
permission-profile: ":read-only"
comment:
needs: review
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/github-script@v7
env:
MESSAGE: ${{ needs.review.outputs.message }}
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: process.env.MESSAGE,
});

Пример промпта .github/codex/prompts/review.md:

Сделай ревью изменений этого PR относительно основной ветки.
Это dbt-проект. Правила — в AGENTS.md, раздел Code Review Rules.
Отмечай только реальные проблемы, которые внёс этот PR.
Для каждой проблемы — файл, строка и почему это ошибка.
Без замечаний о стиле.
  • Ограничьте, кто может запускать workflow (параметр allow-users)
  • Текст PR, коммиты и issues — непроверенные данные. В них может быть скрытая инструкция
  • CODEX_API_KEY или OPENAI_API_KEY — только на шаге с Codex, не на весь job
  • Не используйте safety-strategy: unsafe на общих runner
  • Режим read-only не защищает секреты, которые уже есть в окружении
  • Для API-ключа поставьте лимит расходов
ЗадачаКак
Исправить упавший CIWorkflow на событие workflow_run с failure. Codex пишет патч, отдельный job создаёт PR
Release notescodex exec -o notes.md "release notes по коммитам с прошлого тега"
Проверка документацииРаз в неделю: найти модели без описаний, создать issue
Проверка миграцийПеред merge: нет ли DROP и TRUNCATE в новых миграциях
  • /review в новом разговоре — перед каждым PR
  • @codex review в GitHub, правила — в AGENTS.md
  • codex exec — для скриптов и CI, по умолчанию только чтение
  • GitHub Action — два job: чтение с ключом, запись без ключа

При входе через ChatGPT у вас есть лимиты на 5-часовое окно. Могут быть и недельные лимиты. Посмотреть текущее использование — /status или /usage.

Примерное число сообщений за 5 часов на плане Plus:

МодельСообщений
GPT-6 Astra5–45
GPT-6.1 Sol15–160
GPT-6.1 Terra35–285
GPT-6 Luna350–3000

Разброс большой: короткая задача тратит мало, долгая с большим контекстом — много.

Что тратит лимиты быстрее:

  • Облачные задачи — дороже локальных
  • Режим /fast — в 2,5 раза дороже по лимитам подписки (в 2 раза — при оплате кредитами)
  • Высокий уровень рассуждений
  • Большой контекст, много MCP-серверов
  • Автоматическое ревью каждого PR

Когда лимиты закончились, можно использовать кредиты (на планах Plus и Pro их можно докупить). Luna примерно в 20 раз дешевле Sol по кредитам.

СоветПочему работает
Luna для простых задачЛимиты в десятки раз выше
low для чётких задачМеньше токенов на рассуждения
Точная задача с @файламиАгент меньше ищет по проекту
Хороший AGENTS.mdАгент не изучает проект заново каждый раз
Короткий AGENTS.mdОн загружается в каждый разговор
Отключите ненужные MCPИх описание занимает контекст
/new для новой задачиНе таскайте старый контекст
Локально, а не в облакеОблачные задачи дороже
Лимит для API-ключаЗащита от неожиданного счёта
Подписка ChatGPTAPI-ключ
ОплатаФиксированная в месяцЗа токены
Облако, GitHub, SlackДаНет
CIМожно, но неудобноУдобно
Риск большого счётаНетЕсть — ставьте лимит

Частый вариант: подписка для работы, отдельный API-ключ с лимитом — для CI.

  • Лимиты — на 5 часов и на неделю. Проверка — /status
  • Экономия: Luna, low, точные задачи, короткий AGENTS.md
  • Для CI — отдельный API-ключ с лимитом расходов

  1. Начните с AGENTS.md. Команды сборки, тестов, линтера и критерии «готово»
  2. Дайте агенту способ проверить себя. Без тестов агент не знает, что ошибся
  3. Ставьте задачу как тикет. Цель, контекст, ограничения, «готово, когда»
  4. Сложное — сначала /plan. Попросите задать вопросы
  5. Маленькие шаги. Одна модель, один DAG, одна миграция за раз
  6. Один разговор — одна задача. /new между задачами
  7. Коммитьте часто. Легко откатиться, если агент ушёл не туда
  8. Ревью всегда. /review в новом разговоре, потом своими глазами
  9. Песочница включена. Полный доступ — только в контейнере
  10. Повторяющееся — в skill. Третий раз пишете тот же промпт — пора
ОшибкаЧто будетКак правильно
Правила в каждом промптеАгент забывает, вы устаётеПравила — в AGENTS.md
Нет команд тестовАгент «закончил», но код не работаетКоманды в AGENTS.md
Сложная задача без планаАгент уходит не туда/plan
Полный доступ с первого дняРиск потерять файлыРежим Auto, полный доступ — в контейнере
Параллельные агенты в одной папкеКонфликты правокgit worktree
Смотреть, как агент работаетВы теряете времяЗапускайте другую задачу параллельно
Весь проект в одном чатеКонтекст переполнен, качество падает/new, /compact
Доверять SQL без проверкиНеверные JOIN, лишние строкиdbt build, сверка цифр
Доступ агента к productionМожно потерять данныеТолько dev и права на чтение

Перед merge кода от агента:

  • Тесты и dbt build проходят
  • Зерно модели правильное, нет дублей
  • JOIN не теряют и не размножают строки
  • Колонки и таблицы существуют
  • Цифры сходятся с известным результатом (сверка)
  • Нет секретов и паролей в коде
  • Нет команд против production
  • Описания и тесты добавлены
  • Вы понимаете каждую строку изменений

Последний пункт — самый важный. Если не понимаете код — попросите Codex объяснить его.


Многие команды используют оба агента. Это нормально: ревью другой моделью находит другие ошибки.

CodexClaude Code
КомпанияOpenAIAnthropic
МоделиGPT-6Claude Opus, Sonnet, Haiku 5.5, Fable 5.1
ПесочницаВключена по умолчанию на уровне ОСЕсть (/sandbox), режимы разрешений
Облачные задачиДа, встроеныЕсть, но это не главный сценарий
Ревью в GitHub@codex review, автоматическоеЧерез GitHub Action и плагины
РасширяемостьSkills, хуки, плагины, субагентыОчень богатая: skills, хуки, плагины, субагенты, Agent Teams
ИнструкцииAGENTS.mdCLAUDE.md (читает и AGENTS.md)
Открытый код CLIДаНет

По отзывам инженеров, которые работают с обоими:

  • Codex сильнее: долгие задачи по инструкции, делегирование в облако, ревью кода, стоимость
  • Claude Code сильнее: интерактивная работа, расширяемость, сложные рабочие процессы со своими инструментами

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

ЧтоCodexClaude Code
Инструкции проектаAGENTS.mdCLAUDE.md
Настройки~/.codex/config.toml, .codex/config.toml~/.claude/settings.json, .claude/settings.json
Планирование/plan, Shift+TabРежим Plan, Shift+Tab
Разрешения/permissions/permissions, Shift+Tab
Skills.agents/skills/, вызов $имя.claude/skills/, вызов /имя
Субагенты.codex/agents/*.toml.claude/agents/*.md
Хукиhooks.jsonhooks в settings.json
MCPcodex mcp addclaude mcp add
Без интерфейсаcodex execclaude -p
Ревью/review/code-review
Продолжить сессиюcodex resumeclaude --continue

Держите общие правила в AGENTS.md. В CLAUDE.md подключите его и добавьте только специфичное для Claude Code:

CLAUDE.md
@AGENTS.md
## Только для Claude Code
- Используй субагента sql-reviewer после изменений в models/

Skills из .agents/skills/ читают Codex, Cursor и другие агенты. Переход с Claude Code или Cursor упрощает команда /import.


Официальные:

Сообщество:

На нашем сайте:


Курс создан в ноябре 2026 года. Codex быстро развивается, поэтому детали могут меняться. Сверяйтесь с официальной документацией и списком изменений.