Расширенная конфигурация Codex
Codex CLIРасширенный слой конфигурации позволяет нам точно управлять поставщиками моделей, разрешениями песочницы, хуками, данными телеметрии и поведением терминала.
Если вы новичок в Codex, сначала прочитайтеОсновы конфигурации(Основы конфигурации), чтобы получить общее представление; эта статья предполагает, что вы уже знаете~/.codex/config.tomlего существование и назначение.
Обзор иерархии конфигурации
Конфигурация Codex состоит из нескольких наложенных слоёв. Понимание этого — краеугольный камень всего последующего продвинутого использования.
Снизу вверх слои располагаются так: системный слой → пользовательский слой (~/.codex/config.toml) → слой Profile → проектный слой (.codex/config.toml) → аргументы командной строки CLI.
Верхние слои переопределяют нижние слои с тем же именем; конфигурация проекта, ближайшая к текущему рабочему каталогу, имеет наивысший приоритет.
Самый безопасный способ определить текущую активную конфигурацию —codex --helpиспользовать логи, или явно использоватьcodex exec "show my current config"и позволить модели интерпретировать её для вас.
Профили: именованный слой конфигурации
Profile— это рекомендуемый в Codex подход «переключения по сценариям»: сохраните набор конфигураций в виде файла TOML и загружайте его по требованию через--profileзагрузку.
Файлы профиля находятся в~/.codex/<name>.config.toml, где<name>может содержать только буквы, цифры, дефисы и подчёркивания.
Создание и использование профиля
Предположим, вы часто проводите глубокие проверки кода и хотите получить более сильную способность к рассуждению:
Пример
model = "gpt-5.5" # Использовать модель с более сильной способностью к рассуждению
model_reasoning_effort = "xhigh" # Установить усилие рассуждения на максимум
approval_policy = "on-request" # Запрашивать подтверждение при каждом вызове инструмента
model_catalog_json = "/Users/me/.codex/model-catalogs/deep-review.json" # Необязательно: пользовательский каталог моделей
Запустить Codex с профилем:
Пример
codex --profile deep-review
# Или использовать в неинтерактивном режиме exec
codex exec --profile deep-review "проверь это изменение"
Семантика слияния профилей
Файлы профиля не являются полной конфигурацией; они представляют собой инкрементальное переопределение поверх слоя пользовательского уровня~/.codex/config.toml.
Это означает, что в профиле нужно указывать только поля "отличающиеся от конфигурации по умолчанию"; остальные поля автоматически наследуют пользовательские настройки.
Если и на пользовательском уровне, и в профиле задано одно и то же полеmodel_catalog_json,, значение из профиля имеет приоритет.。
Начиная с Codex 0.134.0,--profileбольше не читаетconfig.tomlв[profiles.<name>]таблицы и больше не поддерживает селекторы верхнего уровняprofile = "name". Все исторические настройки профиля должны быть перенесены в отдельные файлы~/.codex/<name>.config.toml.
Миграция со старой конфигурации на профиль
Если ваш предыдущийconfig.tomlвыглядел так:
Пример
profile = "deep-review"
[profiles.deep-review]
model = "gpt-5.5"
model_reasoning_effort = "xhigh"
Вам нужно разделить это на два файла:
# 文件路径:~/.codex/config.toml(保留非 profile 部分) # 注意:删除了 profile = "deep-review" 选择器
# 文件路径:~/.codex/deep-review.config.toml model = "gpt-5.5" model_reasoning_effort = "xhigh"
После миграции исходноеcodex --profile deep-reviewиспользование командной строки остаётся неизменным.
Одноразовое переопределение в командной строке
Иногда вы просто хотите временно изменить одно или два поля для одной задачи, не загрязняя файлы конфигурации. В этом случае вы можете использовать переопределения CLI:
Предпочитайте выделенные флаги
Если предусмотрены официальные выделенные параметры (такие как--model),предпочитайте выделенный флаг, для лучшей читаемости:
Пример
codex --model gpt-5.4
Использование --config для переопределения произвольных ключей
Для полей без выделенных флагов используйте-cили--configпереопределения. Значение имеет формат TOML, а не JSON.
Пример
codex --config model='"gpt-5.4"'
# Логические значения записываются напрямую
codex --config sandbox_workspace_write.network_access=true
# Массивы используют синтаксис массивов TOML
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'
Несколько правил, в которых легко допустить ошибку:
- Используйте точечный синтаксис для доступа к вложенным полям, например,mcp_servers.context7.enabled=false
- --configЗначение разбирается как TOML; строки, содержащие пробелы, должны быть заключены в кавычки.
- Если разбор завершается ошибкой, Codex рассматривает всё значение как строку.
Самый быстрый способ узнать, сработало ли переопределение, — добавить к команде простой вопрос: "какую модель вы используете?", позволив Codex сообщить текущую конфигурацию.
Расположение файла конфигурации и состояния
Codex хранит всё локальное состояние в каталогеCODEX_HOME, по умолчанию~/.codex。
Распространённые файлы и их назначение:
| Файл | Назначение | Конфиденциально? |
|---|---|---|
| config.toml | Локальная основная конфигурация; все настройки задаются здесь. | нет |
| auth.json | Файловые учётные данные (если системная связка ключей не используется) | Да, рекомендуются права 600 |
| history.jsonl | История диалогов (можно отключить) | Может содержать конфиденциальные данные |
| logs/、caches/ | Журналы и кеш времени выполнения | Может содержать фрагменты тела запроса |
Хотите просто изменить базовый URL OpenAI?
Многие используют прокси LLM, маршрутизаторы или проекты с резидентностью данных и нуждаются только в измененииopenaiбазового URL встроенного провайдера.
В этом случае напрямую задайтеopenai_base_url, не создавайте новый[model_providers.openai], потому что встроенные ID нельзя переопределить:
Пример
# Направьте базовый URL встроенного провайдера openai на прокси
openai_base_url = "https://us.api.openai.com/v1"
Конфигурация на уровне проекта .codex/config.toml
Конфигурация уровня проекта размещается в корне репозитория в.codex/config.tomlи используется для общих настроек по умолчанию команды.
Codex выполняет поиск вверх от рабочей директории,Файл, ближайший к текущей рабочей директории, имеет наивысший приоритет.。
Границы конфигурации уровня проекта
По соображениям безопасности,только когда проект помечен как "trusted"будет загружен слой .codex/ уровня проекта (включая config.toml, локальные хуки и локальные правила).
В недоверенных проектах чувствительные ключи из таблицы ниже игнорируются, и выводится предупреждение при запуске:
| Игнорируемый ключ | Причина |
|---|---|
| openai_base_url、chatgpt_base_url | Предотвращает перенаправление учетных данных / изменение метаданных хоста |
| apps_mcp_product_sku | Влияет на идентификацию продукта Codex Apps |
| model_provider、model_providers | Предотвращает замену учетных данных / идентичности провайдера |
| notify | Предотвращает выполнение произвольных команд локальной машины |
| profile、profiles | На уровне проекта нельзя выбрать профиль конфигурации |
| experimental_realtime_ws_base_url、otel | Телеметрия и каналы реального времени |
Эти ключи должны быть помещены в пользовательский~/.codex/config.toml.
Относительные пути (например,model_instructions_file) разрешаются относительно их.codex/каталога, в котором они содержатся.
Если проект не является доверенным и вы установитеmodel_provider = "proxy", Codex выведет предупреждение при запуске и будет использовать провайдера по умолчанию; это сделано в целях безопасности, а не является ошибкой.
Хуки: хуки жизненного цикла
Хуки позволяют вставлять пользовательские скрипты в ключевых точках, таких как вызовы инструментов, начало раундов и т. д., что подходит для аудита, фильтрации чувствительных слов, проверок коммитов и многого другого.
Конфигурация хуков поддерживает две формы, и структура событий абсолютно одинакова:
| Form | Расположение | Подходящие сценарии |
|---|---|---|
| hooks.jsonФайл | Тот же каталог, что и config.toml | Удобен для инструментария JSON, легко переиспользуется |
| Встроенная[[hooks.*]]таблица | Внутри config.toml | Вся конфигурация управляется централизованно |
Четыре наиболее часто используемых места загрузки:
- ~/.codex/hooks.json
- ~/.codex/config.toml
- <repo>/.codex/hooks.json
- <repo>/.codex/config.toml
Хуки уровня проекта загружаются только тогда, когда проект является доверенным; хуки уровня пользователя всегда загружаются независимо.
Пример встроенного TOML-хука
Ниже показан хук предварительной проверки, который выполняется перед вызовами инструмента Bash:
Пример
# Совпадает со всеми вызовами инструмента Bash
[[hooks.PreToolUse]]
matcher = "^Bash$"
[[hooks.PreToolUse.hooks]]
type = "command"
# Запустить скрипт предварительной проверки в репозитории (путь относительно каталога, в котором находится .codex/)
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py"'
timeout = 30 # Тайм-аут в секундах; после тайм-аута считать отклонённым
statusMessage = "Проверка команды Bash" # Подсказка в строке состояния
Если один и тот же слой уже существуетhooks.jsonТакже существует встроенный вариант[hooks]В таблице Codex загрузит оба и выведет предупреждение.Рекомендуется выбирать только одну форму на слой, чтобы избежать удвоения затрат на сопровождение.
Пользовательские провайдеры моделей
Когда вам нужно подключить Codex к официальным конечным точкам, не относящимся к OpenAI, таким как LLM-прокси, Ollama, Mistral, Azure и т. д.,model_providersявляется точкой входа.
Встроенный идентификатор провайдера (openai、ollama、lmstudio)Нельзя использовать повторноиначе возникнет конфликт.
Базовое определение
Пример
model = "gpt-5.4" # Имя модели определяется выбранным провайдером
model_provider = "proxy" # Указывает на следующий [model_providers.proxy]
[model_providers.proxy]
name = "OpenAI через LLM-прокси" # Отображаемое имя
base_url = "http://proxy.example.com"
env_key = "OPENAI_API_KEY" # Прочитать секрет из переменной окружения
[model_providers.local_ollama]
name = "Ollama"
base_url = "http://localhost:11434/v1"
[model_providers.mistral]
name = "Mistral"
base_url = "https://api.mistral.ai/v1"
env_key = "MISTRAL_API_KEY"
Добавление HTTP-заголовков
Некоторые прокси требуют дополнительных заголовков (например, идентификатор арендатора, флаги функций):
Пример
# Статический заголовок: отправляется с каждым запросом
http_headers = { "X-Example-Header" = "example-value" }
# Динамический заголовок: значение читается из переменной окружения
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }
Аутентификация на основе команды
Когда bearer-токен провайдера нужно динамически получать из внешнего помощника учётных данных, используйте[model_providers.<id>.auth]:
Пример
name = "OpenAI через LLM-прокси"
base_url = "https://proxy.example.com/v1"
wire_api = "responses" # Использовать протокол Responses API
[model_providers.proxy.auth]
command = "/usr/local/bin/fetch-codex-token"
args = ["--audience", "codex"]
timeout_ms = 5000 # Тайм-аут одной операции получения
refresh_interval_ms = 300000 # Интервал активного обновления (5 минут)
Ограничения среды выполнения для команды auth:
- Не получаетstdin, должен выводить токен вstdout
- Codex автоматически удаляет начальные и конечные пробелы, а пустой токен считается ошибкой.
- Настройкиrefresh_interval_ms = 0Означает обновление только после ошибки аутентификации
- Нельзя использовать вместе с env_key, experimental_bearer_token, requires_openai_auth
Встроенный провайдер Amazon Bedrock
Встроено в Codexamazon-bedrockДля встроенных провайдеров можно напрямую использоватьmodel_providerСсылка:
Пример
model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"
[model_providers.amazon-bedrock.aws]
profile = "default" # Профиль AWS; если не задан, используется стандартная цепочка учётных данных
region = "eu-central-1" # Регион Bedrock
Встроенный провайдер Bedrock поддерживает только вложение.awsпереопределений профиля и региона в ...; для других пользовательских элементов используйте стандартныйmodel_providers.<id>процесс.
Локальный режим OSS
Codex поддерживает подключение к локальным моделям с "открытым исходным кодом" (например, Ollama, LM Studio) с помощью--ossзапуска.
Если передан только--oss, а провайдер не указан, Codex прочитаетoss_providerдля выбора значения по умолчанию:
Пример
# Локальный провайдер по умолчанию; необязательно ollama или lmstudio
oss_provider = "ollama"
Пример использования:
Пример
codex --oss
# Явно указать, что этот сеанс должен использовать lmstudio
codex --oss --oss-provider lmstudio
Поставщик Azure и тонкая настройка
Пример интеграции с Azure OpenAI, параметры уровня запроса и стратегия повторных попыток:
Пример
[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY" # Чтение ключа из переменной среды
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses" # Использовать протокол Responses API
request_max_retries = 4 # Количество повторных попыток для обычных запросов
stream_retries = 10 # Количество повторных попыток для потоковых запросов
stream_idle_timeout_ms = 300000 # Тайм-аут простоя потоковой передачи (5 минут)
Требуется изменить встроенныйopenaiПри использовании базового URL провайдера используйтеopenai_base_url, не создавайте новый[model_providers.openai]。
Проекты ChatGPT с Data Residency
Проекты ChatGPT с включённой функцией "Data Residency" должны использовать базовый URL с префиксом региона:
Пример
model_provider = "openaidr"
[model_providers.openaidr]
name = "OpenAI Data Residency"
# Замените "us" на префикс, указанный в документации по Data Residency (например, eu, jp и т. д.)
base_url = "https://us.api.openai.com/v1"
Не все модели поддерживают Data Residency; перед выбором ознакомьтесь со списком "допустимых моделей" в документации OpenAI по Data Residency.
Рассуждения модели, многословность и контекст
Самый распространённый набор из четырёх параметров для управления поведением модели:
Пример
model_reasoning_summary = "none" # Отключить сводку рассуждений
model_verbosity = "low" # Сократить длину ответа
model_supports_reasoning_summaries = true # Заставить модель выводить рассуждения
model_context_window = 128000 # Переопределить размер контекстного окна
гдеmodel_verbosityДействует только для провайдеров, использующих Responses API; провайдер Chat Completions проигнорирует этот параметр.
Политики подтверждения и режимы песочницы
approval_policyУправляет тем, когда Codex останавливается, чтобы запросить подтверждение у человека,sandbox_modeУправляет тем, к каким файлам и сетям он может получить доступ.
Эти два измерения можно комбинировать независимо; ниже приведён набор типовых конфигураций:
Пример
approval_policy = "untrusted" # Другие варианты: on-request, never, или { granular = { ... } }
approvals_reviewer = "user" # "auto_review" проходит автоматическую проверку
sandbox_mode = "workspace-write"
allow_login_shell = false # Отключить login shell (усиление защиты)
# Пример детализированной политики одобрения (с разбивкой по категориям запросов)
# approval_policy = { granular = {
# sandbox_approval = true,
# rules = true,
# mcp_elicitations = true,
# request_permissions = false, # категории запросов разрешений сразу завершаются отказом
# skill_approval = false # категории скриптов навыков сразу завершаются отказом
# } }
[sandbox_workspace_write]
exclude_tmpdir_env_var = false # Разрешить запись в $TMPDIR
exclude_slash_tmp = false # Разрешить запись в /tmp
writable_roots = ["/Users/YOU/.pyenv/shims"] # Дополнительные каталоги для записи
network_access = false # Запретить доступ к внешней сети по умолчанию
[auto_review]
policy = """
Используйте политику автоматической проверки вашей организации.
"""
]
Краткая справка по типовым комбинациям
| Сценарии | approval_policy | sandbox_mode | Описание |
|---|---|---|---|
| Локальная ежедневная разработка | on-request | workspace-write | Запрос подтверждения перед каждым вызовом инструмента; самый безопасный вариант |
| Автоматизация CI | never | workspace-write | Без вмешательства человека, необходимо тестировать в песочнице |
| Полностью доверенная среда | never | danger-full-access | Отключите песочницу; используйте только в изолированных средах |
| Сценарии строгого аудита | недоверенный | workspace-write | Все операции записи требуют вторичного подтверждения |
Отключить песочницу (использовать с осторожностью)
Если в вашей среде уже есть изоляция на уровне процессов, вы можете отключить песочницу Codex:
Пример
sandbox_mode = "danger-full-access"
В режимеworkspace-writeнекоторые среды будут.git/и.codex/Оставить только для чтения. Это означает, что команды вродеgit commitпо-прежнему требуют подтверждения при выполнении вне песочницы. Чтобы коммитить напрямую внутри песочницы, используйтеrules, чтобы явно разрешить.
Политика переменных среды оболочки
shell_environment_policyУправляет тем, какие переменные среды Codex передаёт при запуске подпроцессов.Цель по умолчанию— "утечка меньшего числа секретов + сохранение путей, необходимых для задачи."
Пример
[shell_environment_policy]
inherit = "none" # Чистый старт (рекомендуется)
set = { PATH = "/usr/bin", MY_FLAG = "1" } # Явно задать переменные
ignore_default_excludes = false # Сохранить стандартную фильтрацию KEY/SECRET/TOKEN
exclude = ["AWS_*", "AZURE_*"] # Дополнительно исключить переменные, соответствующие glob-шаблонам
include_only = ["PATH", "HOME"] # Передавать только по белому списку (переопределяет exclude)
Синтаксис шаблонов: glob без учета регистра,*Соответствует любому символу,?Соответствует одному символу,[A-Z]Является классом символов.
ignore_default_excludes = falseЭто сохранит встроенные фильтры Codex для KEY/SECRET/TOKEN, вступающие в силу до include/exclude.
MCP-серверы
MCP-серверы (Model Context Protocol) позволяют Codex подключаться к внешним наборам инструментов.
Полные инструкции по настройке MCP см. в официальнойдокументации MCP; в этой статье они не раскрываются. Типичные шаблоны:
Пример
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
enabled = true
# Временно отключить конкретную службу MCP с помощью --config
# codex --config mcp_servers.context7.enabled=false
Наблюдаемость и телеметрия (OTel)
Codex поддерживает экспорт логов выполнения через OpenTelemetry, по умолчанию отключено. Как включить:
Пример
[otel]
environment = "staging" # По умолчанию dev
exporter = "none" # Необязательно: otlp-http или otlp-grpc
log_user_prompt = false # Не экспортировать содержимое пользовательского запроса (рекомендуется)
Выбор HTTP-экспортёра
Пример
exporter = { otlp-http = {
endpoint = "https://otel.example.com/v1/logs",
protocol = "binary",
headers = { "x-otlp-api-key" = "${OTP_TOKEN}" }
}}
Выбор gRPC-экспортера
Пример
exporter = { otlp-grpc = {
endpoint = "https://otel.example.com:4317",
headers = { "x-otlp-meta" = "abc123" }
}}
Типы экспортируемых событий
Codex генерирует структурированные события, включая, но не ограничиваясь:
| Events | Значение |
|---|---|
| codex.conversation_starts | Модель, настройки рассуждений, политика песочницы/подтверждений |
| codex.api_request | Попытки API-запроса, статус, длительность, ошибки |
| codex.sse_event | События потока SSE, количество токенов (при response.completed) |
| codex.websocket_request、codex.websocket_event | Запросы и сообщения WebSocket |
| codex.user_prompt | Длина пользовательского промпта; содержимое по умолчанию скрыто. |
| codex.tool_decision | Решения о вызове инструментов: одобрить/отклонить, является ли источником конфигурация или пользователь |
| codex.tool_result | Длительность выполнения инструмента, успех/неудача, фрагменты вывода |
Когдаexporter = "none"Когда ..., Codex всё ещё записывает события в память, но не отправляет их.При закрытии он всё ещё запускает асинхронную пакетную отправку для каждого события, flush при завершении процесса.
Анонимные метрики (включены по умолчанию)
По умолчанию Codex периодически отправляет небольшой объём анонимных данных об использовании и состоянии для выявления аномалий.Не содержит PII。
Чтобы полностью отключить:
Пример
[analytics]
enabled = false
Скрытие и показ событий рассуждений
В логах CI вывод рассуждений часто бывает "шумным", и его можно глобально отключить:
Пример
hide_agent_reasoning = true
И наоборот, когда нужно просмотреть исходное содержимое рассуждений модели:
Пример
show_raw_agent_reasoning = true
Включайте это только тогда, когда убедились, что ваш рабочий процесс допускает раскрытие исходных рассуждений. Некоторые модели (такие какgpt-oss) сами не выводят исходные рассуждения; в этом случае эта настройка не даёт эффекта.
Внешние уведомления (notify)
Когда Codex завершает ход, он может запускать внешние скрипты для реализации уведомлений на рабочем столе, вебхуков чата, обновлений статуса CI и т. д.
Пример
notify = ["python3", "/path/to/notify.py"]
Скрипт получает аргумент JSON; общие поля:
| Fields | Значение |
|---|---|
| type | В настоящее время толькоagent-turn-complete |
| thread-id | ID сессии |
| turn-id | ID хода |
| cwd | Рабочий каталог |
| input-messages | Список сообщений пользователя |
| last-assistant-message | Последнее сообщение ассистента |
Простой пример скрипта, который вызывает terminal-notifier:
Пример
#!/usr/bin/env python3
import json, subprocess, sys
def main() -> int:
notification = json.loads(sys.argv[1])
# Обрабатывать только события завершения хода
if notification.get("type") != "agent-turn-complete":
return 0
title = f"Codex: {notification.get('last-assistant-message', 'Ход завершён!')}"
message = " ".join(notification.get("input-messages", []))
subprocess.check_output([
"terminal-notifier",
"-title", title,
"-message", message,
"-group", "codex-" + notification.get("thread-id", ""),
"-activate", "com.googlecode.iterm2",
])
return 0
if __name__ == "__main__":
sys.exit(main())
Разница между notify и tui.notifications
| Механизм | Подходящие сценарии | Ключевая конфигурация |
|---|---|---|
| notify | вебхуки, уведомления на рабочем столе, хуки CI | Внешняя программа |
| tui.notifications | Встроенные уведомления TUI | Поддержка фильтрации по типу события |
| tui.notification_method | Способ уведомления терминала | auto / osc9 / bel |
| tui.notification_condition | Условие срабатывания | unfocused / always |
autoВ этом режиме Code предпочитает escape-последовательность терминала OSC 9; некоторые терминалы воспринимают её как уведомление на рабочем столе; если она не поддерживается, используется BEL (\x07)。
Обратная связь и история
Отключить сбор обратной связи
По умолчанию Codex предоставляется в TUI./feedbackкоманда. Чтобы отключить:
Пример
[feedback]
enabled = false
После закрытия/feedbackбудет отображать сообщение об отключении, и Codex отказывается отправлять отзыв.
Записи истории (history.jsonl)
По умолчанию Codex записывает локальные стенограммы сессий в~/.codex/history.jsonlКак отключить:
Пример
[history]
persistence = "none"
Ограничивает размер файла (при превышении удаляются самые старые записи и выполняется сжатие):
Пример
[history]
max_bytes = 104857600 # 100 MiB
Кликабельные ссылки
Если терминал или редактор это поддерживает, Codex может отображать ссылки на файлы в виде кликабельных ссылок.
Пример
# Необязательно: vscode, cursor, windsurf, vscode-insiders, none
file_opener = "vscode"
После настройки ссылка/home/example/project/main.py:42будет переписана какvscode://file/.../main.py:42, а при щелчке в VS Code произойдёт переход к этому местоположению.
Обнаружение инструкций проекта (AGENTS.md)
Codex прочитаетAGENTS.md(и связанные файлы), автоматически внесёт соглашения проекта в «первый ход» сессии.
Два основных параметра:
| Ключ конфигурации | Функция | Типичные значения |
|---|---|---|
| project_doc_max_bytes | Максимальное количество байтов, считываемых на каждый AGENTS.md | По умолчанию примерно 32 KiB |
| project_doc_fallback_filenames | Имя резервного файла, когда AGENTS.md отсутствует | Например,CLAUDE.md |
Параметры пользовательского интерфейса терминала (TUI)
ЗапуститеcodexЗапуск без подкоманды открывает интерактивный TUI.[tui]Основные клавиши приведены в таблице ниже:
| Клавиша | Функция | Необязательные значения |
|---|---|---|
| tui.notifications | Включение/отключение уведомлений TUI; можно фильтровать по типу события | Логическое значение / массив типов событий |
| tui.notification_method | Способ уведомления терминала | auto、osc9、bel |
| tui.notification_condition | Условие срабатывания | unfocused、always |
| tui.animations | ASCII-анимации и эффекты мерцания | true / false |
| tui.alternate_screen | Использовать ли альтернативный экран (установите never, чтобы сохранить историю прокрутки) | auto, always, never |
| tui.show_tooltips | Показывать ли на приветственной странице советы для начинающих | true / false |
Краткая справочная таблица по общей конфигурации
Считайте этот раздел кратким справочным чек-листом «посмотри, если забыл»:
| Требования | Расположение конфигурации / команда |
|---|---|
| Переключить модель | --model gpt-5.4илиmodel = "..." |
| Конфигурация на основе сценариев | --profile <name> + ~/.codex/<name>.config.toml |
| Временно изменить любое поле | --config key=value(синтаксис TOML) |
| Изменить конечную точку OpenAI | openai_base_url |
| Подключить прокси/собственного поставщика | [model_providers.<id>] + model_provider |
| Локальная Ollama | --oss + oss_provider |
| Отключить песочницу (используйте с осторожностью) | sandbox_mode = "danger-full-access" |
| Отключить анонимные метрики | [analytics] enabled = false |
| Отключить историю | [history] persistence = "none" |
| Отключить обратную связь | [feedback] enabled = false |
| Уведомления на рабочем столе | notify = ["python3", "/path/to/notify.py"] |
Часто задаваемые вопросы
model_provider, заданный в конфигурации уровня проекта, не применяется?
По соображениям безопасности,model_provider、model_providers、profile、notifyи другие чувствительные ключиБудут игнорироваться в .codex/config.toml уровня проекта, и при запуске выводится предупреждение.
Перенесите эти ключи на уровень пользователя~/.codex/config.tomlИменно в него.
Изменения, записанные с помощью --config, не действуют?
Проверьте три вещи: соответствует ли значение синтаксису TOML (массивы используют[], строки используют"", вложенность использует точки); не разделила ли оболочка несколько значений, обработав пробелы как разделители; правильно ли написаны имена ключей. Откройте~/.codex/logs/В последних логах можно увидеть исходную строку, которую не удалось разобрать.
После запуска с профилем всё ещё используется модель по умолчанию?
Самая частая причина: файл профиля всё ещё использует старую[profiles.<name>]таблицу, или суффикс имени файла не.config.toml. Начиная с 0.134.0, распознаётся только~/.codex/<name>.config.tomlформат.
Почему git commit всё ещё требует подтверждения после отключения песочницы?
Закрытиеsandbox_modeне влияет на политику подтверждений.git commitи другие команды всё ещё могут [требовать подтверждения], потому чтоapproval_policy = "on-request"и вызывает запрос; если вы хотите "полностью автоматические коммиты", вам также нужно установить политику подтверждений вnever。
Могут ли пользовательские модели выбирать серию gpt-5?
Зависит отbase_urlтого, поддерживает ли это сервис, на который он указывает. Сам Codex не выполняет строгую проверку поляmodel; ключевой момент — может ли ваша сторона провайдера распознать его и ответить на него.
Другие расширения