Русский

Расширенная конфигурация

Расширенная конфигурация

Расширенные параметры настройки локальных клиентов Codex

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

Общие сведения об инструкциях для проектов, многократно используемых возможностях, пользовательских слеш-командах, рабочих процессах субагентов и интеграциях см. в разделе Настройка. Ключи конфигурации описаны в справочнике по конфигурации.

Профили

Профили позволяют сохранять именованные слои конфигурации и переключаться между ними из CLI. При передаче --profile profile-name Codex загружает ~/.codex/config.toml, а затем накладывает поверх него ~/.codex/profile-name.config.toml. Имена профилей могут содержать буквы, цифры, дефисы и символы подчёркивания.

Создайте отдельный файл TOML для каждого профиля. Используйте в файле профиля ключи конфигурации верхнего уровня; не помещайте их внутрь [profiles.profile-name].

# ~/.codex/deep-review.config.toml
model = "gpt-5.6-sol"
model_reasoning_effort = "xhigh"
approval_policy = "on-request"
model_catalog_json = "/Users/me/.codex/model-catalogs/deep-review.json"
codex --profile deep-review
codex exec --profile deep-review "review this change"

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

В Codex 0.134.0 и более поздних версиях --profile больше не считывает [profiles.profile-name] из config.toml, а селектор верхнего уровня profile = "profile-name" больше не поддерживается. Перенесите устаревшие настройки профиля в ~/.codex/profile-name.config.toml, затем удалите соответствующую таблицу [profiles.profile-name] и селектор profile = "profile-name" из config.toml.

Разовые переопределения из CLI

Помимо редактирования ~/.codex/config.toml, конфигурацию отдельного запуска можно переопределить из CLI:

  • По возможности используйте специальные флаги (например, --model).
  • Используйте -c / --config, если требуется переопределить произвольный ключ.

Примеры:

# Dedicated flag
codex --model gpt-5.6-terra

# Generic key/value override (value is TOML, not JSON)
codex --config model='"gpt-5.6-terra"'
codex --config sandbox_workspace_write.network_access=true
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'

Примечания:

  • Для задания вложенных значений в ключах можно использовать точечную нотацию (например, mcp_servers.context7.enabled=false).
  • Значения --config разбираются как TOML. Если вы не уверены, заключите значение в кавычки, чтобы оболочка не разделила его по пробелам.
  • Если значение невозможно разобрать как TOML, Codex обрабатывает его как строку.

Расположение конфигурации и состояния

Codex хранит локальное состояние в CODEX_HOME (по умолчанию — ~/.codex).

Там могут находиться следующие распространённые файлы:

  • config.toml (ваша локальная конфигурация)
  • auth.json (если используется файловое хранилище учётных данных) либо связка ключей/хранилище ключей ОС
  • history.jsonl (если включено сохранение истории)
  • Другое пользовательское состояние, например журналы и кэши

Сведения об аутентификации (включая режимы хранения учётных данных) см. в разделе Аутентификация. Полный список ключей конфигурации приведён в справочнике по конфигурации.

Общие значения по умолчанию, правила и навыки, добавляемые в репозитории или системные пути, описаны в разделе Командная конфигурация.

Если требуется лишь направить встроенный провайдер OpenAI на прокси-сервер LLM, маршрутизатор или проект с поддержкой резидентности данных, задайте openai_base_url в config.toml вместо определения нового провайдера. Это изменит базовый URL встроенного провайдера openai без необходимости создавать отдельную запись model_providers.<id>.

openai_base_url = "https://us.api.openai.com/v1"

Файлы конфигурации проекта (.codex/config.toml)

Помимо пользовательской конфигурации, Codex считывает переопределения уровня проекта из файлов .codex/config.toml в репозитории. Codex проходит от корня проекта до текущего рабочего каталога и загружает каждый найденный файл .codex/config.toml. Если один ключ определён в нескольких файлах, приоритет имеет файл, ближайший к рабочему каталогу.

В целях безопасности Codex загружает файлы конфигурации уровня проекта, только если проект является доверенным. Если проект не является доверенным, Codex игнорирует слои .codex/ проекта, включая .codex/config.toml, локальные хуки проекта и локальные правила проекта. Пользовательские и системные слои остаются отдельными и продолжают загружаться.

Относительные пути в конфигурации проекта (например, model_instructions_file) разрешаются относительно папки .codex/, содержащей config.toml.

Файлы конфигурации проекта не могут переопределять параметры, которые перенаправляют учётные данные, изменяют принадлежащие хосту метаданные запросов приложений, изменяют аутентификацию провайдера, выбирают профили конфигурации или запускают локальные команды уведомлений и телеметрии. Codex игнорирует следующие ключи в локальном для проекта .codex/config.toml и при их обнаружении выводит предупреждение при запуске: openai_base_url, chatgpt_base_url, apps_mcp_product_sku, model_provider, model_providers, notify, profile, profiles, experimental_realtime_ws_base_url и otel. Задавайте ключи провайдера, уведомлений и телеметрии в пользовательском ~/.codex/config.toml; выбирайте профили конфигурации с помощью --profile profile-name и ~/.codex/profile-name.config.toml.

Хуки

Codex также может загружать хуки жизненного цикла либо из файлов hooks.json, либо из встроенных таблиц [hooks] в файлах config.toml, расположенных рядом с активными слоями конфигурации.

На практике наиболее полезны четыре расположения:

  • ~/.codex/hooks.json
  • ~/.codex/config.toml
  • <repo>/.codex/hooks.json
  • <repo>/.codex/config.toml

Локальные хуки проекта загружаются, только если слой .codex/ проекта является доверенным. Пользовательские хуки не зависят от уровня доверия к проекту.

Встроенные хуки TOML используют ту же структуру событий, что и hooks.json:

[[hooks.PreToolUse]]
matcher = "^Bash$"

[[hooks.PreToolUse.hooks]]
type = "command"
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py"'
timeout = 30
statusMessage = "Checking Bash command"

Если один слой содержит и hooks.json, и встроенный [hooks], Codex загружает оба и выводит предупреждение. Используйте в каждом слое только одно представление.

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

Роли агентов ([agents] в config.toml)

Настройка ролей субагентов ([agents] в config.toml) описана в разделе Субагенты.

Определение корня проекта

Codex обнаруживает конфигурацию проекта (например, слои .codex/ и AGENTS.md), поднимаясь от рабочего каталога вверх до корня проекта.

По умолчанию Codex считает корнем проекта каталог, содержащий .git. Чтобы изменить это поведение, задайте project_root_markers в config.toml:

# Treat a directory as the project root when it contains any of these markers.
project_root_markers = [".git", ".hg", ".sl"]

Задайте project_root_markers = [], чтобы не искать в родительских каталогах и считать корнем проекта текущий рабочий каталог.

Пользовательские провайдеры моделей

Провайдер модели определяет, как Codex подключается к модели (базовый URL, сетевой API, аутентификация и необязательные заголовки HTTP). Пользовательские провайдеры не могут использовать зарезервированные идентификаторы встроенных провайдеров: openai, ollama и lmstudio.

Определите дополнительные провайдеры и укажите их в model_provider:

model = "gpt-5.6-terra"
model_provider = "proxy"

[model_providers.proxy]
name = "OpenAI using LLM proxy"
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"

Если пользовательский провайдер поддерживает отдельную конечную точку веб-поиска, объявите эту возможность в его конфигурации:

[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
env_key = "OPENAI_API_KEY"
supports_standalone_web_search = true

Для пользовательских провайдеров параметр по умолчанию имеет значение false. Отдельный веб-поиск находится в разработке и по умолчанию отключён. Установка возможности провайдера в true не включает её: провайдер должен поддерживать совместимую конечную точку, а выбранные модель и среда выполнения — отдельный поиск. Настроенный режим web_search и управляемые ограничения поиска продолжают действовать.

При необходимости добавьте заголовки запросов:

[model_providers.example]
http_headers = { "X-Example-Header" = "example-value" }
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }

Используйте аутентификацию на основе команды, если провайдеру требуется, чтобы Codex получал токены носителя от внешнего вспомогательного средства работы с учётными данными:

[model_providers.proxy]
name = "OpenAI using LLM proxy"
base_url = "https://proxy.example.com/v1"
wire_api = "responses"

[model_providers.proxy.auth]
command = "/usr/local/bin/fetch-codex-token"
args = ["--audience", "codex"]
timeout_ms = 5000
refresh_interval_ms = 300000

Команда аутентификации не получает stdin и должна вывести токен в stdout. Codex удаляет окружающие пробельные символы, считает пустой токен ошибкой и заблаговременно обновляет его при refresh_interval_ms; задайте refresh_interval_ms = 0, чтобы обновлять токен только после повторной попытки аутентификации. Не сочетайте [model_providers.<id>.auth] с env_key, experimental_bearer_token или requires_openai_auth.

Провайдер Amazon Bedrock

Codex включает встроенный провайдер моделей amazon-bedrock. Укажите его непосредственно в model_provider; в отличие от пользовательских провайдеров, этот встроенный провайдер поддерживает только вложенные переопределения профиля и региона AWS.

model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"

[model_providers.amazon-bedrock.aws]
profile = "default"
region = "eu-central-1"

Если profile не указан, Codex использует стандартную цепочку учётных данных AWS. Задайте в region поддерживаемый регион Bedrock, который должен обрабатывать запросы.

Полный процесс настройки, варианты аутентификации, поддерживаемые модели и доступность возможностей описаны в разделе Использование ChatGPT Work и Codex с Amazon Bedrock.

Режим OSS (локальные провайдеры)

Codex может работать с локальным провайдером с открытым исходным кодом, например Ollama или LM Studio, если передать --oss. Выберите провайдера для отдельного запуска с помощью --local-provider или задайте провайдера по умолчанию в oss_provider. Если не задано ни одно значение, интерактивный CLI предложит сделать выбор; codex exec завершит работу с ошибкой.

# Default local provider used with `--oss`
oss_provider = "ollama" # or "lmstudio"

Провайдер Azure и настройка отдельных провайдеров

[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT_NAME.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"
request_max_retries = 4
stream_max_retries = 10
stream_idle_timeout_ms = 300000

Чтобы изменить базовый URL встроенного провайдера OpenAI, используйте openai_base_url; не создавайте [model_providers.openai], поскольку идентификаторы встроенных провайдеров нельзя переопределять.

Организации API, использующие резидентность данных

Проекты, созданные с включённой резидентностью данных, могут создать провайдер модели, чтобы обновить base_url с правильным префиксом. Для рабочих пространств ChatGPT с резидентностью данных пользовательский провайдер не требуется; при входе через ChatGPT Codex учитывает настройки резидентности рабочего пространства.

model_provider = "openaidr"
[model_providers.openaidr]
name = "OpenAI Data Residency"
base_url = "https://us.api.openai.com/v1" # Replace 'us' with domain prefix

Рассуждение модели, детализация и ограничения

model_reasoning_summary = "none"          # Disable summaries
model_verbosity = "low"                   # Shorten responses
model_supports_reasoning_summaries = true # Force reasoning
model_context_window = 128000             # Context window size

model_verbosity применяется только к провайдерам, использующим Responses API. Провайдеры Chat Completions игнорируют этот параметр.

Политики подтверждений и режимы песочницы

Выберите строгость подтверждений (определяет, когда Codex приостанавливает работу) и уровень песочницы (определяет доступ к файлам и сети).

Практические сведения, которые следует учитывать при редактировании config.toml, см. в разделах Распространённые сочетания песочницы и подтверждений, Защищённые пути в доступных для записи корнях и Сетевой доступ.

Codex и ChatGPT Work больше не поддерживают approval_policy = "untrusted". См. раздел Переход с упразднённой политики одобрения untrusted о поддерживаемых настройках и более строгих правилах одобрения на основе проекта.

Бета-версии профилей разрешений, совместно настраивающих доступ к файловой системе и сети, описаны в разделе Разрешения.

Также можно использовать детализированную политику подтверждений (approval_policy = { granular = { ... } }), чтобы разрешать или автоматически отклонять отдельные категории запросов. Это полезно, если в одних случаях требуются обычные интерактивные подтверждения, а в других, например для request_permissions или запросов скриптов навыков, необходимо автоматически запрещать продолжение при любой неопределённости.

Задайте approvals_reviewer = "auto_review", чтобы направлять подходящие интерактивные запросы подтверждения на автоматическую проверку. Это изменяет проверяющую сторону, но не границы песочницы.

Используйте [auto_review].policy для локальных инструкций политики проверки. Управляемый guardian_policy_config имеет приоритет.

approval_policy = "on-request"  # Other options: never or { granular = { ... } }
approvals_reviewer = "user"     # Or "auto_review" for automatic review
sandbox_mode = "workspace-write"
allow_login_shell = false       # Optional hardening: disallow login shells for shell tools

# Example granular approval policy:
# 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  # Allow $TMPDIR
exclude_slash_tmp = false       # Allow /tmp
writable_roots = ["/Users/YOU/.pyenv/shims"]
network_access = false          # Opt in to outbound network

[auto_review]
policy = """
Use your organization's automatic review policy.
"""

Именованные профили разрешений

Встроенные профили, синтаксис пользовательских профилей и полная модель настройки файловой системы и сети описаны в разделе Разрешения.

Полный список ключей и ограничения требований см. в разделах Справочник по конфигурации и Управляемая конфигурация.

Полностью отключите песочницу (используйте этот вариант, только если ваша среда уже изолирует процессы):

sandbox_mode = "danger-full-access"

Политика переменных среды оболочки

shell_environment_policy определяет, какие переменные среды Codex передаёт запускаемым командам. Начните с пустой среды, используя inherit = "none", или унаследуйте сокращённый набор с помощью inherit = "core". Добавьте явные значения и фильтры ключей, чтобы не передавать запускаемым командам ненужные секреты.

[shell_environment_policy]
inherit = "core"
set = { MY_FLAG = "1" }
ignore_default_excludes = false

[shell_environment_policy.filters]
"AWS_*" = "exclude"
"AZURE_*" = "exclude"

Шаблоны фильтров не зависят от регистра и поддерживают * и ?. Используйте "exclude" для удаления совпадающих переменных. Если какой-либо шаблон использует "include", Codex сохраняет только переменные, совпадающие с шаблоном включения. Включения не восстанавливают переменные, которые уже были исключены. Ключи фильтров объединяются без учёта регистра между слоями конфигурации.

По умолчанию ignore_default_excludes имеет значение true, поэтому Codex не удаляет автоматически имена переменных, содержащие KEY, SECRET или TOKEN. Задайте значение false, чтобы применить эти автоматические исключения до выполнения явных фильтров.

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

Устаревшие массивы exclude и include_only по-прежнему поддерживаются для существующих конфигураций. Не сочетайте ни один из этих массивов с [shell_environment_policy.filters] в одном слое конфигурации: Codex отклонит такое сочетание.

Серверы MCP

Подробности настройки см. в отдельной документации MCP.

Наблюдаемость и телеметрия

Включите экспорт журналов OpenTelemetry (OTel), чтобы отслеживать запуски Codex (запросы API, SSE/события, запросы, подтверждения/результаты инструментов). По умолчанию он отключён; включите его с помощью [otel]:

[otel]
environment = "staging"   # defaults to "dev"
exporter = "none"         # set to otlp-http or otlp-grpc to send events
log_user_prompt = false   # redact user prompts unless explicitly enabled

Выберите экспортёр:

[otel]
exporter = { otlp-http = {
  endpoint = "https://otel.example.com/v1/logs",
  protocol = "binary",
  headers = { "x-otlp-api-key" = "${OTLP_TOKEN}" }
}}
[otel]
exporter = { otlp-grpc = {
  endpoint = "https://otel.example.com:4317",
  headers = { "x-otlp-meta" = "abc123" }
}}

При exporter = "none" Codex записывает события, но никуда их не отправляет. Экспортёры асинхронно объединяют данные в пакеты и сбрасывают их при завершении работы. Метаданные событий включают имя службы, версию CLI, тег среды, идентификатор беседы, модель, настройки песочницы/подтверждений и поля конкретного события (см. справочник по конфигурации).

Какие данные передаются

Codex передаёт структурированные события журнала о запусках и использовании инструментов. К типичным типам событий относятся:

  • codex.conversation_starts (модель, настройки рассуждения, политика песочницы/подтверждений)
  • codex.api_request (попытка, состояние/успешность, длительность и сведения об ошибках)
  • codex.sse_event (тип потокового события, успешность/сбой, длительность, а для response.completed — также количество токенов)
  • codex.websocket_request и codex.websocket_event (длительность запроса, а также тип/успешность/ошибка каждого сообщения)
  • codex.user_prompt (длина; содержимое скрывается, если его передача не включена явно)
  • codex.tool_decision (подтверждено/отклонено и принято ли решение на основе конфигурации или пользователем)
  • codex.tool_result (длительность, успешность, фрагмент вывода)

Передаваемые метрики OTel

Когда конвейер метрик OTel включён, Codex передаёт счётчики и гистограммы длительности для операций API, потоков и инструментов.

Каждая указанная ниже метрика также включает стандартные теги метаданных: auth_mode, originator, session_source, model и app.version.

Метрика Тип Поля Описание
codex.api_request счётчик status, success Число запросов API по состоянию HTTP и успешности/сбою.
codex.api_request.duration_ms гистограмма status, success Длительность запросов API в миллисекундах.
codex.sse_event счётчик kind, success Число событий SSE по типу события и успешности/сбою.
codex.sse_event.duration_ms гистограмма kind, success Длительность обработки событий SSE в миллисекундах.
codex.websocket.request счётчик success Число запросов WebSocket по успешности/сбою.
codex.websocket.request.duration_ms гистограмма success Длительность запросов WebSocket в миллисекундах.
codex.websocket.event счётчик kind, success Число сообщений/событий WebSocket по типу и успешности/сбою.
codex.websocket.event.duration_ms гистограмма kind, success Длительность обработки сообщений/событий WebSocket в миллисекундах.
codex.tool.call счётчик tool, success Число вызовов инструментов по имени инструмента и успешности/сбою.
codex.tool.call.duration_ms гистограмма tool, success Длительность выполнения инструмента в миллисекундах по имени и результату.

Дополнительные рекомендации по безопасности и конфиденциальности телеметрии см. в разделе Безопасность.

Метрики

По умолчанию Codex периодически отправляет в OpenAI небольшой объём анонимных данных об использовании и состоянии. Это помогает выявлять случаи некорректной работы Codex и показывает, какие возможности и параметры конфигурации используются, чтобы команда Codex могла сосредоточиться на самом важном. Эти метрики не содержат персональных данных (PII). Сбор метрик не зависит от экспорта журналов и трассировок OTel.

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

[analytics]
enabled = false

Каждая метрика включает собственные поля и перечисленные ниже стандартные поля контекста.

Стандартные поля контекста (применяются к каждому событию и каждой метрике)

  • auth_mode: swic | api | unknown.
  • model: имя используемой модели.
  • app.version: версия Codex.

Каталог метрик

Каждая метрика включает обязательные поля и указанные выше стандартные поля контекста. В приведённых ниже именах метрик опущен префикс codex.. Большинство имён метрик централизовано в codex-rs/otel/src/metrics/names.rs; сюда также включены метрики отдельных возможностей, передаваемые вне этого файла. Если метрика включает поле tool, оно отражает используемый внутренний инструмент (например, apply_patch или shell) и не содержит фактическую команду оболочки или патч, который пытается применить codex.

Среда выполнения и транспорт модели

Метрика Тип Поля Описание
api_request счётчик status, success Число запросов API по состоянию HTTP и успешности/сбою.
api_request.duration_ms гистограмма status, success Длительность запросов API в миллисекундах.
sse_event счётчик kind, success Число событий SSE по типу события и успешности/сбою.
sse_event.duration_ms гистограмма kind, success Длительность обработки событий SSE в миллисекундах.
websocket.request счётчик success Число запросов WebSocket по успешности/сбою.
websocket.request.duration_ms гистограмма success Длительность запросов WebSocket в миллисекундах.
websocket.event счётчик kind, success Число сообщений/событий WebSocket по типу и успешности/сбою.
websocket.event.duration_ms гистограмма kind, success Длительность обработки сообщений/событий WebSocket в миллисекундах.
responses_api_overhead.duration_ms гистограмма Затраты времени Responses API для ответов WebSocket.
responses_api_inference_time.duration_ms гистограмма Время вывода Responses API для ответов WebSocket.
responses_api_engine_iapi_ttft.duration_ms гистограмма Время до первого токена IAPI движка Responses API.
responses_api_engine_service_ttft.duration_ms гистограмма Служебное время до первого токена движка Responses API.
responses_api_engine_iapi_tbt.duration_ms гистограмма Время между токенами IAPI движка Responses API.
responses_api_engine_service_tbt.duration_ms гистограмма Служебное время между токенами движка Responses API.
transport.fallback_to_http счётчик from_wire_api Число переключений с WebSocket на HTTP.
remote_models.fetch_update.duration_ms гистограмма Время получения удалённых определений моделей.
remote_models.load_cache.duration_ms гистограмма Время загрузки удалённого кэша моделей.
startup_prewarm.duration_ms гистограмма status Длительность предварительного прогрева при запуске по результату.
startup_prewarm.age_at_first_turn_ms гистограмма status Возраст предварительного прогрева при запуске, когда его разрешает первый реальный ход.
cloud_requirements.fetch.duration_ms гистограмма Длительность получения облачных требований, управляемых рабочим пространством.
cloud_requirements.fetch_attempt счётчик См. примечание Попытки получения облачных требований, управляемых рабочим пространством.
cloud_requirements.fetch_final счётчик См. примечание Итоговый результат получения облачных требований, управляемых рабочим пространством.
cloud_requirements.load счётчик trigger, outcome Результат загрузки облачных требований, управляемых рабочим пространством.

Метрика cloud_requirements.fetch_attempt включает поля trigger, attempt, outcome и status_code. Метрика cloud_requirements.fetch_final включает поля trigger, outcome, reason, attempt_count и status_code.

Активность ходов и инструментов

Метрика Тип Поля Описание
turn.e2e_duration_ms гистограмма Полное время выполнения всего хода.
turn.ttft.duration_ms гистограмма Время до первого токена в ходе.
turn.ttfm.duration_ms гистограмма Время до первого элемента вывода модели в ходе.
turn.network_proxy счётчик active, tmp_mem_enabled Был ли управляемый сетевой прокси активен в ходе.
turn.memory счётчик read_allowed, feature_enabled, config_use_memories, has_citations Доступность чтения памяти и использование ссылок на память для каждого хода.
turn.tool.call гистограмма tmp_mem_enabled Число вызовов инструментов в ходе.
turn.token_usage гистограмма token_type, tmp_mem_enabled Использование токенов в ходе по типу токена (total, input, cached_input, output или reasoning_output).
tool.call счётчик tool, success Число вызовов инструментов по имени инструмента и успешности/сбою.
tool.call.duration_ms гистограмма tool, success Длительность выполнения инструмента в миллисекундах по имени и результату.
tool.unified_exec счётчик tty Вызовы унифицированного инструмента выполнения по режиму TTY.
approval.requested счётчик tool, approved Результат запроса подтверждения инструмента (approved, approved_with_amendment, approved_for_session, denied, abort).
mcp.call счётчик См. примечание Результат вызова инструмента MCP.
mcp.call.duration_ms гистограмма См. примечание Длительность вызова инструмента MCP.
mcp.tools.list.duration_ms гистограмма cache Длительность получения списка инструментов MCP, включая состояние попадания/промаха кэша.
mcp.tools.fetch_uncached.duration_ms гистограмма Длительность получения инструментов MCP при промахе кэша.
mcp.tools.cache_write.duration_ms гистограмма Длительность записи кэша инструментов MCP для Codex Apps.
hooks.run счётчик hook_name, source, status Число запусков хуков по имени, источнику и состоянию.
hooks.run.duration_ms гистограмма hook_name, source, status Длительность выполнения хуков в миллисекундах.

Метрики mcp.call и mcp.call.duration_ms включают status; обычные события вызовов инструментов также включают tool, а при наличии — connector_id и connector_name. Заблокированные вызовы MCP Codex Apps могут передавать mcp.call только с status.

Потоки, задачи и возможности

Метрика Тип Поля Описание
feature.state счётчик feature, value Значения возможностей, отличающиеся от стандартных (по одной строке на каждое).
status_line счётчик Сеанс запущен с настроенной строкой состояния.
model_warning счётчик Модели отправлено предупреждение.
thread.started счётчик is_git Создан новый поток с отметкой о том, находится ли рабочий каталог в Git-репозитории.
conversation.turn.count счётчик Число ходов пользователя/ассистента в потоке, записываемое в конце потока.
thread.fork счётчик source Новый поток создан ответвлением существующего потока.
thread.rename счётчик Поток переименован.
thread.side счётчик source Создана параллельная беседа.
thread.skills.enabled_total гистограмма Число навыков, включённых для нового потока.
thread.skills.kept_total гистограмма Число включённых навыков, сохранённых после формирования запроса.
thread.skills.truncated гистограмма Был ли список включённых навыков усечён при формировании (1 или 0).
task.compact счётчик type Число сжатий по типу (remote или local), включая ручные и автоматические.
task.review счётчик Число запущенных проверок.
task.undo счётчик Число выполненных отмен.
task.user_shell счётчик Число действий пользователя в оболочке (например, ! в TUI).
shell_snapshot счётчик См. примечание Успешность создания снимка оболочки.
shell_snapshot.duration_ms гистограмма success Время создания снимка оболочки.
skill.injected счётчик status, skill Результаты внедрения навыков по навыку.
plugins.startup_sync счётчик transport, status Попытки синхронизации курируемых плагинов при запуске.
plugins.startup_sync.final счётчик transport, status Итоговый результат синхронизации курируемых плагинов при запуске.
multi_agent.spawn счётчик role Запуски агентов по ролям.
multi_agent.resume счётчик Возобновления работы агентов.
multi_agent.nickname_pool_reset счётчик Сбросы пула псевдонимов агентов.

Метрика shell_snapshot включает success, а при сбоях — failure_reason.

Память и локальное состояние

Метрика Тип Поля Описание
memory.phase1 счётчик status Число заданий фазы 1 памяти по состоянию.
memory.phase1.e2e_ms гистограмма Полная длительность фазы 1 памяти.
memory.phase1.output счётчик Число записанных результатов фазы 1 памяти.
memory.phase1.token_usage гистограмма token_type Использование токенов фазой 1 памяти по типу токена.
memory.phase2 счётчик status Число заданий фазы 2 памяти по состоянию.
memory.phase2.e2e_ms гистограмма Полная длительность фазы 2 памяти.
memory.phase2.input счётчик Число входных элементов фазы 2 памяти.
memory.phase2.token_usage гистограмма token_type Использование токенов фазой 2 памяти по типу токена.
memories.usage счётчик kind, tool, success Использование памяти по виду, инструменту и успешности/сбою.
external_agent_config.detect счётчик См. примечание Обнаружения конфигураций внешних агентов по типу элемента миграции.
external_agent_config.import счётчик См. примечание Импорт конфигураций внешних агентов по типу элемента миграции.
db.backfill счётчик status Результаты первоначального заполнения БД состояния (upserted, failed).
db.backfill.duration_ms гистограмма status Длительность первоначального заполнения БД состояния.
db.error счётчик stage Ошибки при операциях с БД состояния.

Метрики external_agent_config.detect и external_agent_config.import включают migration_type; миграции навыков также включают skills_count.

Песочница Windows

Метрика Тип Поля Описание
windows_sandbox.setup_success счётчик originator, mode Успешные настройки песочницы Windows.
windows_sandbox.setup_failure счётчик originator, mode Сбои настройки песочницы Windows.
windows_sandbox.setup_duration_ms гистограмма result, originator, mode Длительность настройки песочницы Windows.
windows_sandbox.elevated_setup_success счётчик Успешные настройки песочницы Windows с повышенными привилегиями.
windows_sandbox.elevated_setup_failure счётчик См. примечание Сбои настройки песочницы с повышенными привилегиями.
windows_sandbox.elevated_setup_canceled счётчик См. примечание Отменённые попытки настройки песочницы с повышенными привилегиями.
windows_sandbox.elevated_setup_duration_ms гистограмма result Длительность настройки песочницы с повышенными привилегиями.
windows_sandbox.elevated_prompt_shown счётчик Показан запрос настройки песочницы с повышенными привилегиями.
windows_sandbox.elevated_prompt_accept счётчик Запрос настройки песочницы с повышенными привилегиями принят.
windows_sandbox.elevated_prompt_use_legacy счётчик В запросе повышения привилегий пользователь выбрал устаревшую песочницу.
windows_sandbox.elevated_prompt_quit счётчик Пользователь вышел из запроса повышения привилегий.
windows_sandbox.fallback_prompt_shown счётчик Показан запрос резервной песочницы.
windows_sandbox.fallback_retry_elevated счётчик В резервном запросе пользователь повторил настройку с повышенными привилегиями.
windows_sandbox.fallback_use_legacy счётчик В резервном запросе пользователь выбрал устаревшую песочницу.
windows_sandbox.fallback_prompt_quit счётчик Пользователь вышел из резервного запроса.
windows_sandbox.legacy_setup_preflight_failed счётчик См. примечание Сбой предварительной проверки настройки устаревшей песочницы Windows.
windows_sandbox.setup_elevated_sandbox_command счётчик Вызвана команда настройки песочницы с повышенными привилегиями.
windows_sandbox.createprocessasuserw_failed счётчик error_code, path_kind, exe, level Сбои CreateProcessAsUserW в Windows.

Метрики сбоев настройки с повышенными привилегиями включают code и message, когда доступны сведения о сбое настройки Windows, а при отправке из общего пути настройки могут также включать originator. Метрика windows_sandbox.legacy_setup_preflight_failed включает originator при отправке из общего пути настройки, однако сбои предварительной проверки резервного запроса могут не содержать никаких полей.

Управление обратной связью

По умолчанию локальные клиенты позволяют пользователям отправлять обратную связь через /feedback. Чтобы отключить сбор обратной связи на компьютере одновременно в приложении ChatGPT для настольных компьютеров, Codex CLI и расширении IDE, обновите конфигурацию:

[feedback]
enabled = false

После отключения /feedback показывает сообщение о недоступности функции, а Codex отклоняет отправку обратной связи.

Скрытие и отображение событий рассуждений

Если вы хотите сократить избыточный вывод «рассуждений» (например, в журналах CI), его можно подавить:

hide_agent_reasoning = true

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

show_raw_agent_reasoning = true

Включайте необработанные рассуждения, только если это допустимо для вашего рабочего процесса. Некоторые модели и поставщики (например, gpt-oss) не выводят необработанные рассуждения; в таком случае эта настройка не дает видимого эффекта.

Уведомления

Используйте notify, чтобы запускать внешнюю программу всякий раз, когда Codex создает поддерживаемые события (в настоящее время только agent-turn-complete). Это удобно для всплывающих уведомлений на рабочем столе, вебхуков чатов, обновлений CI и любых оповещений по сторонним каналам, которые не поддерживаются встроенными уведомлениями TUI.

notify = ["python3", "/path/to/notify.py"]

Пример notify.py (сокращенный), реагирующий на agent-turn-complete:

#!/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', 'Turn Complete!')}"
    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())

Скрипт получает единственный аргумент JSON. Часто используются следующие поля:

  • type (в настоящее время agent-turn-complete)
  • thread-id (идентификатор сеанса)
  • turn-id (идентификатор хода)
  • cwd (рабочий каталог)
  • input-messages (сообщения пользователя, которые привели к этому ходу)
  • last-assistant-message (текст последнего сообщения ассистента)

Поместите скрипт в подходящее место на диске и укажите путь к нему в notify.

notify и tui.notifications

  • notify запускает внешнюю программу (подходит для вебхуков, уведомлений рабочего стола и хуков CI).
  • tui.notifications встроен в TUI и может дополнительно фильтровать события по типу (например, agent-turn-complete и approval-requested).
  • tui.notification_method определяет, как TUI отправляет уведомления терминала (auto, osc9 или bel).
  • tui.notification_condition определяет, будут ли уведомления TUI срабатывать только тогда, когда терминал находится в состоянии unfocused или always.

В режиме auto Codex отдает предпочтение уведомлениям OSC 9 (управляющей последовательности терминала, которую некоторые терминалы интерпретируют как уведомление рабочего стола), а в остальных случаях использует BEL (\x07) как резервный вариант.

Точные ключи приведены в справочнике по конфигурации.

Сохранение истории

По умолчанию Codex сохраняет локальные расшифровки сеансов в CODEX_HOME (например, ~/.codex/history.jsonl). Чтобы отключить локальное сохранение истории:

[history]
persistence = "none"

Чтобы ограничить размер файла истории, задайте history.max_bytes. Когда размер файла превышает установленный предел, Codex удаляет самые старые записи и уплотняет файл, сохраняя самые новые записи.

[history]
max_bytes = 104857600 # 100 MiB

Интерактивные ссылки в цитатах

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

file_opener = "vscode" # or cursor, windsurf, vscode-insiders, none

Пример: ссылка на файл в цитате вида /home/user/project/main.py:42 может быть преобразована в интерактивную ссылку vscode://file/...:42.

Обнаружение инструкций проекта

Codex читает AGENTS.md (и связанные файлы) и включает ограниченный объем указаний по проекту в первый ход сеанса. Это поведение регулируют два параметра:

  • project_doc_max_bytes: какой объем данных читать из каждого файла AGENTS.md
  • project_doc_fallback_filenames: дополнительные имена файлов, которые следует проверять, если на определенном уровне каталогов отсутствует AGENTS.md

Подробное пошаговое описание см. в разделе Пользовательские инструкции с AGENTS.md.

Приложение для настольных компьютеров

Параметры в этом разделе применяются только к приложению ChatGPT для настольных компьютеров.

Добавление пользовательских обработчиков файлов

В пользовательском файле ~/.codex/config.toml добавьте записи в раздел desktop.custom_file_handlers, чтобы открывать файлы в редакторах или внутренних средствах запуска, которые приложение ChatGPT для настольных компьютеров не поддерживает по умолчанию. Каждая запись добавляет целевой редактор в меню Открыть в приложения. Приложение показывает этот вариант, если command является существующим абсолютным путем или разрешается через PATH приложения.

В следующем примере показаны три способа передачи файла обработчику:

# Append the opened path directly after the command.
[desktop.custom_file_handlers.vscodium]
label = "VSCodium"
icon = "/Users/you/.codex/icons/vscodium.png"
command = "codium"

# Place fixed arguments before the opened path.
[desktop.custom_file_handlers.textedit]
label = "TextEdit"
icon = "/Users/you/.codex/icons/textedit.png"
command = "/usr/bin/open"
args = ["-a", "TextEdit"]

# Append one JSON argument with the path and editor context.
[desktop.custom_file_handlers.company_editor]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"
input = "json_argument"

Сохраните config.toml, затем перезапустите приложение ChatGPT для настольных компьютеров.

Идентификатор обработчика — это последний сегмент заголовка таблицы TOML. Он должен содержать от 1 до 64 символов, начинаться с ASCII-буквы или цифры, а остальные символы могут быть только ASCII-буквами, цифрами, точками, символами подчеркивания или дефисами. Приложение добавляет к идентификатору префикс custom:; например, company_editor превращается в custom:company_editor. Заключайте идентификатор с точкой в кавычки, чтобы TOML не интерпретировал его как вложенную таблицу. Например:

[desktop.custom_file_handlers."company.editor"]
label = "Company Editor"
icon = "/opt/company/editor/icon.png"
command = "/opt/company/bin/editor"

Каждый обработчик поддерживает следующие поля:

Поле Обязательное Описание
label Да Отображаемое имя в приложении.
icon Да Встроенный значок приложения, например apps/vscode.png, URL data:image/... в формате base64, URI file: или абсолютный путь к локальному изображению. Для неподдерживаемого источника используется стандартный значок VS Code.
command Да Путь к исполняемому файлу или имя команды для обнаружения и запуска.
args Нет Массив строк, вставляемый между command и входными данными файла. Значение по умолчанию — [].
input Нет Способ передачи приложением входных данных файла: path, json_argument или json_stdin. Значение по умолчанию — path.
supports_ssh Нет Следует ли предлагать обработчик для файлов в рабочих пространствах SSH. Значение по умолчанию — false. Используйте json_stdin, если обработчику нужны сведения об удаленном хосте и пути.

Значение input определяет, что следует после args:

  • path добавляет путь как последний аргумент команды.
  • json_argument добавляет объект JSON с полями target, path, appPath и location. Значение location — это объект со значениями line и column, нумерация которых начинается с 1, либо null.
  • json_stdin записывает объект JSON в стандартный ввод вместо добавления аргумента. Объект также включает hostConfig, remoteWorkspaceRoot и remotePath; когда эти поля неприменимы, их значение равно null.

Например, company_editor может получить следующий аргумент, когда пользователь открывает определенное место в исходном коде:

{
  "target": "custom:company_editor",
  "path": "/repo/src/index.ts",
  "appPath": null,
  "location": { "line": 12, "column": 3 }
}

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

Параметры TUI

Запуск codex без подкоманды открывает интерактивный интерфейс терминала (TUI). Codex предоставляет ряд параметров конфигурации TUI в [tui], включая:

  • tui.notifications: включение или отключение уведомлений (либо ограничение конкретными типами)
  • tui.notification_method: выбор auto, osc9 или bel для уведомлений терминала
  • tui.notification_condition: выбор unfocused или always для определения момента срабатывания уведомлений
  • tui.animations: включение или отключение ASCII-анимаций и эффектов мерцания
  • tui.alternate_screen: управление использованием альтернативного экрана (задайте never, чтобы сохранить прокрутку терминала)
  • tui.show_tooltips: отображение или скрытие подсказок по началу работы на экране приветствия

Значение tui.notification_method по умолчанию — auto. В режиме auto Codex отдает предпочтение уведомлениям OSC 9 (управляющей последовательности терминала, которую некоторые терминалы интерпретируют как уведомление рабочего стола), когда терминал, по всей видимости, их поддерживает, а в остальных случаях использует BEL (\x07) как резервный вариант.

Полный список ключей приведен в справочнике по конфигурации.