Отдельные ключи config.toml обретают смысл, когда собираются в цельные профили под контекст. Профиль отвечает на вопрос "как мы хотим, чтобы Codex вёл себя в этой роли", и собирается из модели, разрешений, sandbox и служебных ключей в одно объяснимое поведение, а не в россыпь скопированных строк. Три профиля покрывают большинство сценариев: безопасный локальный для ежедневной работы, строгий для обзора и отдельный для автоматизации.
Базовый локальный профиль задаёт разумный рабочий баланс. Полезно один раз увидеть его целиком. Ниже - модель и умеренный effort, approval_policy on-request, sandbox workspace-write, кэшированный поиск, credentials в keyring, выключенный login shell и сеть off в рабочей записи. Читается он как явное описание безопасной ежедневной среды: агент может работать и менять файлы в workspace, но не выходит в сеть и не хранит credentials в файле, а спрашивает на выходе за границу.
Профиль обзора устроен намеренно иначе, и различие поучительно. Ниже - review-профиль: approval_policy never, sandbox read-only, высокий effort. Логика прозрачна: обзор не должен ничего менять, поэтому read-only; ему не нужны остановки на подтверждение, поэтому never; и он выигрывает от более глубокого рассуждения, поэтому высокий effort. Это не просто другой набор значений, а другая задача, выраженная конфигурацией, - и именно поэтому её выносят в отдельный профиль.
Полезно один раз увидеть, как профиль выбирают на запуск. Ниже - codex --profile review для интерактива и codex exec --profile review для неинтерактивного обзора репозитория. К этой форме возвращаются, переключаясь между режимами работы: один и тот же репозиторий можно открыть в безопасном локальном профиле для правок и в строгом read-only для обзора, не переписывая настройки вручную каждый раз. Профиль - это переиспользуемая, названная роль, а не разовая настройка.
Автоматизация требует отдельного подхода к тому, где живут настройки. Для CI надёжнее указывать sandbox и output-флаги прямо в самой команде, а не полагаться только на файл профиля, который на чужой машине может оказаться другим. Явные флаги в команде делают прогон воспроизводимым: он ведёт себя одинаково независимо от того, что лежит в пользовательском config исполнителя. Профиль хорош для человека за терминалом, но CI ценит явность выше удобства.
Оговорка к любому профилю обязательна: команды, домены и пути в примерах - только форма, а не готовый allowlist. Их заменяют реальным toolchain проекта; копировать чужой профиль механически опасно, потому что он открывает именно то, что было нужно другому. Профиль - это шаблон структуры, который вы наполняете своими значениями, понимая, что именно каждая строка разрешает. Ценность профиля - в осознанной, объяснимой политике, а не в удобстве скопировать чужую.
Проверяют профиль так же, как и любую настройку, - фактическим эффектом, а не уверенностью. После выбора профиля /status и /debug-config показывают, что реально применилось и какой слой победил. Особенно полезен негативный тест: убедиться, что read-only профиль действительно не даёт записи, а не просто "написан как read-only". Профиль, который не проверили в деле, - это предположение о поведении, а не гарантия, и в вопросах доверия эта разница принципиальна.
Типичные провалы вокруг профилей предсказуемы. Собрать настройки как россыпь строк вместо цельной роли под контекст. Скопировать чужой профиль механически, открыв ненужное. Положиться в CI на файл профиля вместо явных флагов в команде. И не проверить эффект негативным тестом. Собирайте профили под контекст - локальный, обзор, автоматизация, - наполняйте их своими значениями, в CI задавайте ключевое явно и проверяйте применённое через /status и /debug-config.
# ~/.codex/config.toml - безопасный локальный профиль
model = "gpt-5.6"
model_reasoning_effort = "medium"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
web_search = "cached"
cli_auth_credentials_store = "keyring"
allow_login_shell = false
[sandbox_workspace_write]
network_access = false# ~/.codex/review.config.toml
# approval_policy = "never"
# sandbox_mode = "read-only"
# model_reasoning_effort = "high"
codex --profile review
codex exec --profile review "Review this repository for correctness risks"
# CI: задавайте sandbox и output flags прямо в команде, не только в профиле