Расширенная конфигурация
Расширенная конфигурация
Расширенные параметры настройки локальных клиентов 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 sizemodel_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.mdproject_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) как резервный вариант.
Полный список ключей приведен в справочнике по конфигурации.