Erweiterte Codex-Konfiguration

Codex CLIDie erweiterte Konfigurationsschicht ermöglicht es uns, Modellanbieter, Sandbox-Berechtigungen, Hooks, Telemetriedaten und Terminalverhalten präzise zu steuern.

Wenn du neu bei Codex bist, lies zuerstKonfigurationsgrundlagen(Grundlagen der Konfiguration), um ein Gesamtverständnis aufzubauen; dieser Artikel setzt voraus, dass dir bereits~/.codex/config.toml bekannt istseine Existenz und seinen Zweck.


Überblick über die Konfigurationshierarchie

Die Konfiguration von Codex besteht aus mehreren gestapelten Schichten. Dies zu verstehen ist der Grundstein für jede weitere fortgeschrittene Nutzung.

Von unten nach oben sind die Schichten: Systemschicht → Benutzerschicht (~/.codex/config.toml) → Profilschicht → Projektschicht (.codex/config.toml) → CLI-Kommandozeilenargumente.

Obere Schichten überschreiben untere Schichten mit demselben Namen; die Projektkonfiguration, die dem aktuellen Arbeitsverzeichnis am nächsten liegt, hat die höchste Priorität.

Title Codex configuration hierarchy (bottom → top, overridden in order) Layer 5: CLI ① CLI command-line arguments (highest priority) --model、--config、--profile Layer 4: Project-level ② Project-level .codex/config.toml The .codex/ directory in the repository (requires the project to be trusted) Layer 3: Profile ③ Profile named configuration (--profile) ~/.codex/<name>.config.toml Layer 2: User-level ④ User-level ~/.codex/config.toml Personal default configuration under the CODEX_HOME directory Layer 1: System-level ⑤ System-level / team-shared configuration Team Config shared rules and system-level files Right-side notes Single-run override Project-level enforcement Scenario switching Personal defaults Team baseline Bottom notes Merge rules: for the same key, the later one overrides the earlier one; dot syntax can target nested fields. Example: --config mcp_servers.context7.enabled=false disables a single MCP service

Der sicherste Weg, die aktuell aktive Konfiguration zu ermitteln, istcodex --help, um Logs zu verwenden, oder verwende explizitcodex exec "show my current config"und lass das Modell es für dich interpretieren.


Profile: Benannte Konfigurationsschicht

Profilist Codex' empfohlener Ansatz für "szenariobasiertes Umschalten": Speichere eine Reihe von Konfigurationen als TOML-Datei und lade sie bei Bedarf über--profileladen.

Profildateien befinden sich in~/.codex/<name>.config.toml, wobei<name>nur Buchstaben, Ziffern, Bindestriche und Unterstriche enthalten darf.

Ein Profil erstellen und verwenden

Angenommen, Sie führen häufig tiefgehende Code-Reviews durch und wünschen sich eine stärkere Reasoning-Fähigkeit:

Beispiel

# Dateipfad: ~/.codex/deep-review.config.toml
model = "gpt-5.5"                  # Verwenden Sie ein Modell mit stärkerer Reasoning-Fähigkeit
model_reasoning_effort = "xhigh"   # Reasoning-Aufwand auf die höchste Stufe setzen
approval_policy = "on-request"    # Bei jedem Tool-Aufruf eine Genehmigung anfordern
model_catalog_json = "/Users/me/.codex/model-catalogs/deep-review.json"  # Optional: benutzerdefiniertes Modellverzeichnis

Codex mit dem Profil starten:

Beispiel

# Interaktive TUI starten
codex --profile deep-review

# Oder im nicht interaktiven Exec-Modus verwenden
codex exec --profile deep-review "diese Änderung überprüfen"

Semantik der Profilzusammenführung

Profildateien sind keine vollständige Konfiguration; sie sind eine inkrementelle Überschreibung, die auf der Benutzerebene~/.codex/config.tomlaufsetzt.

Das bedeutet, dass Sie im Profil nur Felder schreiben müssen, die "von der Standardkonfiguration abweichen"; andere Felder erben automatisch die Einstellungen auf Benutzerebene.

Wenn sowohl die Benutzerebene als auch das Profil dasselbe Feldmodel_catalog_json,setzen, hat der Profilwert Vorrang.。

Ab Codex 0.134.0,--profileliest nicht mehrconfig.tomlin[profiles.<name>]Tabellen und unterstützt keine Top-Level-profile = "name"Selektoren mehr. Alle historischen Profil-Einstellungen müssen in separate~/.codex/<name>.config.tomlDateien migriert werden.

Migration von der alten Konfiguration zum Profil

Wenn Ihre vorherigeconfig.tomlso aussah:

Beispiel

# Alte Syntax (veraltet)
profile = "deep-review"

[profiles.deep-review]
model = "gpt-5.5"
model_reasoning_effort = "xhigh"

Sie müssen es in zwei Dateien aufteilen:

# 文件路径:~/.codex/config.toml(保留非 profile 部分)
# 注意:删除了 profile = "deep-review" 选择器
# 文件路径:~/.codex/deep-review.config.toml
model = "gpt-5.5"
model_reasoning_effort = "xhigh"

Nach der Migration bleibt die ursprüngliche Befehlszeilenverwendung voncodex --profile deep-reviewunverändert.


Einmalige Überschreibung über die Befehlszeile

Manchmal möchten Sie für eine einzelne Aufgabe nur ein oder zwei Felder vorübergehend ändern, ohne die Konfigurationsdateien zu verschmutzen. In diesem Fall können Sie CLI-Überschreibungen verwenden:

Dedizierte Flags bevorzugen

Wenn offizielle dedizierte Parameter bereitgestellt werden (wie--model),), bevorzugen Sie das dedizierte Flag, für beste Lesbarkeit:

Beispiel

# Modell mit einem dedizierten Flag wechseln
codex --model gpt-5.4

Verwenden von --config zum Überschreiben beliebiger Schlüssel

Verwenden Sie für Felder ohne dedizierte Flags-coder--configÜberschreibungen. Der Wert ist im TOML-Format, nicht im JSON-Format.

Beispiel

# Zeichenkettenwerte müssen doppelte Anführungszeichen verwenden, um Anführungszeichen zu verschachteln
codex --config model='"gpt-5.4"'

# Boolesche Werte werden direkt geschrieben
codex --config sandbox_workspace_write.network_access=true

# Arrays verwenden die TOML-Array-Syntax
codex --config 'shell_environment_policy.include_only=["PATH","HOME"]'

Ein paar fehleranfällige Regeln:

  • Verwende die Punktsyntax, um verschachtelte Felder zu lokalisieren, z. B.mcp_servers.context7.enabled=false
  • --configDer Wert wird als TOML geparst; Zeichenketten mit Leerzeichen müssen in Anführungszeichen gesetzt werden.
  • Wenn das Parsen fehlschlägt, behandelt Codex den gesamten Wert als Zeichenkette.

Der schnellste Weg herauszufinden, ob eine Überschreibung wirksam geworden ist, ist, dem Befehl eine einfache Frage anzuhängen: "Welches Modell verwendest du?", damit Codex die aktuelle Konfiguration meldet.


Speicherorte für Konfigurationsdatei und Zustandsdaten

Codex speichert den gesamten lokalen Zustand imCODEX_HOME-Verzeichnis, standardmäßig unter~/.codex。

Häufige Dateien und ihre Bedeutungen:

DateiZweckSensibel?
config.tomlLokale Hauptkonfiguration; alle Anpassungen gehören hierhin.nein
auth.jsonDateibasierte Anmeldedaten (falls der Systemschlüsselbund nicht verwendet wird)Ja, empfohlene 600 Berechtigungen
history.jsonlKonversationsverlauf (kann deaktiviert werden)Kann sensible Inhalte enthalten
logs/、caches/Laufzeit-Logs und CacheKann Fragmente des Anfragekörpers enthalten

Nur die OpenAI-Basis-URL ändern?

Viele Leute verwenden LLM-Proxys, Router oder Projekte zur Datenresidenz und müssen nur die Basis-URL des integrierten Anbietersopenaiändern.

Setzen Sie in diesem Fall direktopenai_base_url, erstellen Sie keinen neuen[model_providers.openai], da integrierte IDs nicht überschrieben werden können:

Beispiel

# Dateipfad: ~/.codex/config.toml
# Die Basis-URL des integrierten openai-Anbieters auf den Proxy setzen
openai_base_url = "https://us.api.openai.com/v1"

Konfiguration auf Projektebene .codex/config.toml

Die Konfiguration auf Projektebene befindet sich im Stammverzeichnis des Repositorys unter.codex/config.tomlund wird für teamweit geteilte Standardwerte verwendet.

Codex sucht vom Arbeitsverzeichnis aus nach oben.Die Datei, die dem aktuellen Arbeitsverzeichnis am nächsten liegt, hat die höchste Priorität.。

Grenzen der Konfiguration auf Projektebene

Aus Sicherheitsgründen wird die .codex/-Ebene auf Projektebenenur wenn das Projekt als "trusted" markiert istgeladen (einschließlich config.toml, lokaler Hooks und lokaler Regeln).

In nicht vertrauenswürdigen Projekten werden die sensiblen Schlüssel in der folgenden Tabelle ignoriert und es wird eine Warnung beim Start ausgegeben:

Ignorierter SchlüsselGrund
openai_base_url、chatgpt_base_urlVerhindert das Umleiten von Anmeldedaten / Ändern von Host-Metadaten
apps_mcp_product_skuBeeinflusst die Produktidentifikation von Codex Apps
model_provider、model_providersVerhindert das Ersetzen von Anmeldedaten / Anbieteridentität
notifyVerhindert die Ausführung beliebiger lokaler Maschinenbefehle
profile、profilesAuf Projektebene kann kein Konfigurationsprofil ausgewählt werden
experimental_realtime_ws_base_url、otelTelemetrie und Echtzeitkanäle

Diese Schlüssel müssen auf Benutzerebene in~/.codex/config.tomlabgelegt werden.

Relative Pfade (z. B.model_instructions_file) werden relativ zu ihrem.codex/enthaltenden Verzeichnis aufgelöst.

Wenn das Projekt nicht vertrauenswürdig ist und Siemodel_provider = "proxy"festlegen, gibt Codex beim Start eine Warnung aus und verwendet den Standardanbieter; dies ist ein Sicherheitsdesign, kein Fehler.


Hooks: Lebenszyklus-Hooks

Hooks ermöglichen es Ihnen, benutzerdefinierte Skripte an Schlüsselstellen wie Tool-Aufrufen, Rundenstarts usw. einzufügen, geeignet für Auditing, Filterung sensibler Wörter, Commit-Prüfungen und mehr.

Die Hooks-Konfiguration unterstützt zwei Formen, und die Ereignisstruktur ist exakt dieselbe:

FormOrtGeeignete Szenarien
hooks.jsonDateiDasselbe Verzeichnis wie config.tomlJSON-Toolchain-freundlich, leicht wiederverwendbar
Inline[[hooks.*]]TabelleInnerhalb von config.tomlDie gesamte Konfiguration wird zentral verwaltet

Die vier am häufigsten verwendeten Ladeorte:

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

Hooks auf Projektebene werden nur geladen, wenn das Projekt vertrauenswürdig ist; Hooks auf Benutzerebene werden immer unabhängig geladen.

Beispiel für einen Inline-TOML-Hook

Das Folgende ist ein Pre-Check-Hook, der vor Bash-Tool-Aufrufen ausgeführt wird:

Beispiel

# Dateipfad: ~/.codex/config.toml
# Trifft auf alle Bash-Tool-Aufrufe zu
[[hooks.PreToolUse]]
matcher = "^Bash$"

[[hooks.PreToolUse.hooks]]
type = "command"
# Vorabprüfungsskript im Repository aufrufen (Pfad relativ zu dem Verzeichnis, in dem .codex/ liegt)
command = '/usr/bin/python3 "$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_policy.py"'
timeout = 30                                 # Timeout in Sekunden; nach Timeout als abgelehnt behandeln
statusMessage = "Bash-Befehl wird geprüft"      # Hinweis in der Statusleiste

Wenn die gleiche Ebene bereits existierthooks.jsonInline ebenfalls existiert[hooks]In der Tabelle lädt Codex beide und gibt eine Warnung aus.Es wird empfohlen, pro Ebene nur eine Form zu wählen, um doppelte Wartungskosten zu vermeiden.


Benutzerdefinierte Modellanbieter

Wenn Sie Codex mit offiziellen Nicht-OpenAI-Endpunkten wie LLM-Proxys, Ollama, Mistral, Azure usw. verbinden müssen,model_providersist der Einstieg.

Eingebaute Provider-ID (openai、ollama、lmstudio)Kann nicht wiederverwendet werdensonst kommt es zu einem Konflikt.

Grundlegende Definition

Beispiel

# Dateipfad: ~/.codex/config.toml
model = "gpt-5.4"           # Der Modellname wird durch den ausgewählten Provider bestimmt
model_provider = "proxy"    # Verweist auf das folgende [model_providers.proxy]

[model_providers.proxy]
name = "OpenAI mit LLM-Proxy"  # Anzeigename
base_url = "http://proxy.example.com"
env_key = "OPENAI_API_KEY"       # Geheimnis aus Umgebungsvariable lesen

[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-Header hinzufügen

Einige Proxys erfordern zusätzliche Header (z. B. Mandantenkennung, Feature-Flags):

Beispiel

[model_providers.example]
# Statischer Header: wird mit jeder Anfrage gesendet
http_headers = { "X-Example-Header" = "example-value" }
# Dynamischer Header: Wert wird aus Umgebungsvariable gelesen
env_http_headers = { "X-Example-Features" = "EXAMPLE_FEATURES" }

Befehlsgestützte Authentifizierung

Wenn das Bearer-Token des Anbieters dynamisch von einem externen Credential-Helper abgerufen werden muss, verwenden Sie[model_providers.<id>.auth]:

Beispiel

[model_providers.proxy]
name = "OpenAI mit LLM-Proxy"
base_url = "https://proxy.example.com/v1"
wire_api = "responses"   # Verwende das Responses-API-Protokoll

[model_providers.proxy.auth]
command = "/usr/local/bin/fetch-codex-token"
args = ["--audience", "codex"]
timeout_ms = 5000            # Timeout für einen einzelnen Abruf
refresh_interval_ms = 300000 # Aktives Aktualisierungsintervall (5 Minuten)

Laufzeitbeschränkungen für den auth-Befehl:

  • Empfängt keinstdin, muss das Token anstdout ausgeben
  • Codex entfernt automatisch führende/nachfolgende Leerzeichen, und ein leeres Token wird als Fehler behandelt.
  • Einstellungenrefresh_interval_ms = 0Gibt an, dass eine Aktualisierung nur nach einem Authentifizierungsfehler erfolgt
  • Kann nicht zusammen mit env_key, experimental_bearer_token, requires_openai_auth verwendet werden

Integrierter Amazon-Bedrock-Anbieter

In Codex integriertamazon-bedrockFür integrierte Anbieter können Sie direkt verwendenmodel_providerReferenz:

Beispiel

# Dateipfad: ~/.codex/config.toml
model_provider = "amazon-bedrock"
model = "<bedrock-model-id>"

[model_providers.amazon-bedrock.aws]
profile = "default"      # AWS-Profil; wenn nicht festgelegt, wird die Standard-Anmeldeinformationskette verwendet
region = "eu-central-1"  # Bedrock-Region

Der integrierte Bedrock-Anbieter unterstützt nur das Verschachteln von.awsProfil- und Regionsüberschreibungen unter ...; für andere benutzerdefinierte Elemente verwenden Sie bitte das Standard-model_providers.<id>Verfahren.


Lokaler OSS-Modus

Codex unterstützt die Verbindung mit lokalen "Open-Source"-Modellen (z. B. Ollama, LM Studio) über--ossstarten.

Wenn nur--ossübergeben wird und kein Anbieter angegeben ist, liest Codexoss_provider, um den Standard auszuwählen:

Beispiel

# Dateipfad: ~/.codex/config.toml
# Standardmäßiger lokaler Anbieter; optional ollama oder lmstudio
oss_provider = "ollama"

Anwendungsbeispiel:

Beispiel

# Standardmäßigen oss_provider (ollama) verwenden
codex --oss

# Diese Sitzung explizit zur Verwendung von lmstudio angeben
codex --oss --oss-provider lmstudio

Azure-Anbieter und Feinabstimmung

Azure OpenAI-Integrationsbeispiel, das Parameter auf Anfrageebene und Wiederholungsstrategie veranschaulicht:

Beispiel

# Dateipfad: ~/.codex/config.toml
[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT_NAME.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"          # Schlüssel aus der Umgebungsvariable lesen
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"                    # Verwende das Responses-API-Protokoll
request_max_retries = 4                   # Anzahl der Wiederholungen für normale Anfragen
stream_max_retries = 10                   # Anzahl der Wiederholungen für Streaming-Anfragen
stream_idle_time_ms = 300000           # 流式空闲超时(5 分钟)

需要修改内置的openai使用提供商的 base URL 时,应使用openai_base,不要创建新的[model_providers.openai]。


ChatGPT 数据驻留项目

启用了“数据驻留”的 ChatGPT 项目需要使用带区域前缀的 base URL:

Beispiel

# Dateipfad: ~/.codex/config.toml
model_provider = "openaidr"

[model_providers.openaidr]
name = "OpenAI Data Residency"
# 将 "us" 替换为数据驻留文档要求的前缀(例如,eu、jp)
base_url = "https://us.api.openai.com/v1"

并非所有模型都支持数据驻留;在选择之前,请查阅 OpenAI 数据驻留文档中的“符合条件的模型”列表。


模型推理、详细程度和上下文

控制模型行为最常用的四件套:

Beispiel

# Dateipfad: ~/.codex/config.toml
model_reasoning_summary = "none"          # Reasoning-Zusammenfassung deaktivieren
model_verbosity = "low"                   # Antwortlänge verkürzen
model_supports_reasoning_summaries = true # Das Modell zwingen, Reasoning auszugeben
model_context_window = 128000             # Kontextfenstergröße überschreiben

wobeimodel_verbosityNur wirksam bei Anbietern, die die Responses API verwenden; der Chat-Completions-Anbieter ignoriert diese Einstellung.


Genehmigungsrichtlinien und Sandbox-Modi

approval_policySteuert, wann Codex anhält, um eine menschliche Bestätigung anzufordern,sandbox_modeSteuert, auf welche Dateien und Netzwerke es zugreifen kann.

Die beiden Dimensionen können unabhängig kombiniert werden; unten ist eine Reihe typischer Konfigurationen:

Beispiel

# Dateipfad: ~/.codex/config.toml
approval_policy = "untrusted"   # Weitere Optionen: on-request, never, oder { granular = { ... } }
approvals_reviewer = "user"     # "auto_review" durchläuft eine automatische Überprüfung
sandbox_mode = "workspace-write"
allow_login_shell = false       # Login-Shell deaktivieren (Härtung)

# Beispiel für eine feinkörnige Genehmigungsrichtlinie (nach Prompt-Kategorie unterschieden)
# approval_policy = { granular = {
# sandbox_approval = true,
# rules = true,
# mcp_elicitations = true,
# request_permissions = false, # Kategorien für Anfrageberechtigungen schlagen direkt sicher fehl
# skill_approval = false # Skill-Skript-Kategorien schlagen direkt sicher fehl
# } }

[sandbox_workspace_write]
exclude_tmpdir_env_var = false  # Schreiben in $TMPDIR erlauben
exclude_slash_tmp = false       # Schreiben in /tmp erlauben
writable_roots = ["/Users/YOU/.pyenv/shims"]   # Zusätzliche beschreibbare Verzeichnisse
network_access = false          # Externes Netzwerk standardmäßig verbieten

[auto_review]
policy = """
Verwenden Sie die automatische Überprüfungsrichtlinie Ihrer Organisation.
"
""
]

Kurzreferenz für gängige Kombinationen

Szenarienapproval_policysandbox_modeBeschreibung
Lokale tägliche Entwicklungon-requestworkspace-writeVor jedem Tool-Aufruf nachfragen, am sichersten
CI-Automatisierungneverworkspace-writeKein menschliches Eingreifen, muss in einer Sandbox getestet werden
Vollständig vertrauenswürdige Umgebungneverdanger-full-accessSandbox deaktivieren; nur in isolierten Umgebungen verwenden
Strenge Audit-Szenariennicht vertrauenswürdigworkspace-writeAlle Schreibvorgänge erfordern eine sekundäre Bestätigung

Sandbox deaktivieren (mit Vorsicht verwenden)

Wenn Ihre Umgebung bereits über eine Isolation auf Prozessebene verfügt, können Sie die Codex-Sandbox deaktivieren:

Beispiel

# Dateipfad: ~/.codex/config.toml
sandbox_mode = "danger-full-access"

Im Modusworkspace-writewerden einige Umgebungen.git/und.codex/Schreibgeschützt halten. Das bedeutet, dass Befehle wiegit commit... weiterhin eine Genehmigung erfordern, wenn sie außerhalb der Sandbox ausgeführt werden. Um direkt in der Sandbox zu committen, verwenden Sierules, um dies explizit zuzulassen.


Richtlinie für Shell-Umgebungsvariablen

shell_environment_policySteuert, welche Umgebungsvariablen Codex beim Starten von Unterprozessen weitergibt.Standardzielist "weniger Geheimnisse preiszugeben + die für die Aufgabe benötigten Pfade beizubehalten."

Beispiel

# Dateipfad: ~/.codex/config.toml
[shell_environment_policy]
inherit = "none"                            # Sauberer Start (empfohlen)
set = { PATH = "/usr/bin", MY_FLAG = "1" } # Variablen explizit setzen
ignore_default_excludes = false             # Standardfilterung für KEY/SECRET/TOKEN beibehalten
exclude = ["AWS_*", "AZURE_*"]              # Zusätzlich Variablen ausschließen, die Glob-Mustern entsprechen
include_only = ["PATH", "HOME"]             # Nur Whitelist durchreichen (überschreibt exclude)

Mustersyntax: Glob ohne Beachtung der Groß-/Kleinschreibung,*Entspricht einem beliebigen Zeichen,?Entspricht einem einzelnen Zeichen,[A-Z]Ist eine Zeichenklasse.

ignore_default_excludes = falseDadurch bleiben die in Codex integrierten KEY/SECRET/TOKEN-Filter erhalten und wirken vor include/exclude.


MCP-Server

MCP-Server (Model Context Protocol) ermöglichen es Codex, sich mit externen Tool-Sets zu verbinden.

Vollständige Anweisungen zur MCP-Konfiguration finden Sie in der offiziellenMCP-Dokumentation; in diesem Artikel wird nicht näher darauf eingegangen. Häufige Muster:

Beispiel

# Dateipfad: ~/.codex/config.toml
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
enabled = true

# Einen bestimmten MCP-Dienst vorübergehend mit --config deaktivieren
# codex --config mcp_servers.context7.enabled=false

Beobachtbarkeit und Telemetrie (OTel)

Codex unterstützt das Exportieren von Laufzeitprotokollen über OpenTelemetry, standardmäßig deaktiviert. So aktivieren Sie:

Beispiel

# Dateipfad: ~/.codex/config.toml
[otel]
environment = "staging"   # Standardmäßig dev
exporter = "none"         # Optional: otlp-http oder otlp-grpc
log_user_prompt = false   # Benutzer-Prompt-Inhalt nicht exportieren (empfohlen)

Auswahl eines HTTP-Exporters

Beispiel

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

Auswahl eines gRPC-Exporters

Beispiel

[otel]
exporter = { otlp-grpc = {
  endpoint = "https://otel.example.com:4317",
  headers = { "x-otlp-meta" = "abc123" }
}}

Exportierte Ereignistypen

Codex gibt strukturierte Ereignisse aus, einschließlich, aber nicht beschränkt auf:

EreignisseBedeutung
codex.conversation_startsModell, Reasoning-Einstellungen, Sandbox-/Genehmigungsrichtlinie
codex.api_requestAPI-Anfrageversuche, Status, Dauer, Fehler
codex.sse_eventSSE-Stream-Ereignisse, Token-Anzahl (bei response.completed)
codex.websocket_request、codex.websocket_eventWebSocket-Anfragen und -Nachrichten
codex.user_promptLänge des Benutzer-Prompts; Inhalt ist standardmäßig redigiert.
codex.tool_decisionEntscheidungen zu Tool-Aufrufen: Genehmigen/Ablehnen, ob die Quelle die Konfiguration oder der Benutzer ist
codex.tool_resultDauer der Tool-Ausführung, Erfolg/Fehler, Ausgabeausschnitte

Wennexporter = "none"Wenn ..., zeichnet Codex Ereignisse weiterhin im Speicher auf, sendet sie aber nicht.Beim Schließen wird weiterhin ein asynchroner Batch pro Ereignis ausgelöst, Flush beim Prozessende.

Anonyme Metriken (standardmäßig aktiviert)

Standardmäßig meldet Codex regelmäßig eine kleine Menge anonymer Nutzungs- und Zustandsdaten, um Anomalien zu erkennen.Enthält keine PII。

Zum vollständigen Deaktivieren:

Beispiel

# Dateipfad: ~/.codex/config.toml
[analytics]
enabled = false

Ausblenden und Anzeigen von Reasoning-Ereignissen

In CI-Protokollen ist die Reasoning-Ausgabe oft "verrauscht" und kann global deaktiviert werden:

Beispiel

# Dateipfad: ~/.codex/config.toml
hide_agent_reasoning = true

Wenn Sie dagegen den rohen Reasoning-Inhalt des Modells anzeigen müssen:

Beispiel

# Dateipfad: ~/.codex/config.toml
show_raw_agent_reasoning = true

Aktivieren Sie es nur, wenn Sie bestätigt haben, dass Ihr Workflow das Offenlegen von rohem Reasoning erlaubt. Einige Modelle (wiegpt-oss) geben selbst kein rohes Reasoning aus; in diesem Fall hat diese Einstellung keine Wirkung.


Externe Benachrichtigungen (notify)

Wenn Codex einen Turn abschließt, kann es externe Skripte auslösen, um Desktop-Benachrichtigungen, Chat-Webhooks, CI-Statusaktualisierungen usw. umzusetzen.

Beispiel

# Dateipfad: ~/.codex/config.toml
notify = ["python3", "/path/to/notify.py"]

Das Skript empfängt ein JSON-Argument; gängige Felder:

FieldsBedeutung
typeDerzeit nuragent-turn-complete
thread-idSitzungs-ID
turn-idTurn-ID
cwdArbeitsverzeichnis
input-messagesListe der Benutzernachrichten
last-assistant-messageDie letzte Assistentennachricht

Ein einfaches Skriptbeispiel, das terminal-notifier aufruft:

Beispiel

# Dateipfad: /path/to/notify.py
#!/usr/bin/env python3
import json, subprocess, sys

def main() -> int:
    notification = json.loads(sys.argv[1])
    # Nur Turn-Abschlussereignisse behandeln
    if notification.get("type") != "agent-turn-complete":
        return 0
    title = f"Codex: {notification.get('last-assistant-message', 'Turn abgeschlossen!')}"
    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())

Unterschied zwischen notify und tui.notifications

MechanismusGeeignete SzenarienWichtige Konfiguration
notifyWebhooks, Desktop-Benachrichtigungen, CI-HooksExternes Programm
tui.notificationsTUI-integrierte BenachrichtigungenUnterstützt Filterung nach Ereignistyp
tui.notification_methodTerminal-Benachrichtigungsmethodeauto / osc9 / bel
tui.notification_conditionAuslösebedingungunfocused / always

autoIn diesem Modus bevorzugt Codex die OSC 9 Terminal-Escape-Sequenz; manche Terminals behandeln sie als Desktop-Benachrichtigung; wenn nicht unterstützt, fällt es auf BEL zurück (\x07)。


Feedback und Verlauf

Feedback-Sammlung deaktivieren

Standardmäßig ist Codex in der TUI verfügbar./feedback-Befehl. Zum Deaktivieren:

Beispiel

# Dateipfad: ~/.codex/config.toml
[feedback]
enabled = false

Nach dem Schließen von/feedbackwird eine Deaktivierungsmeldung angezeigt, und Codex weigert sich, Feedback zu übermitteln.

Verlaufsdatensätze (history.jsonl)

Standardmäßig schreibt Codex lokale Sitzungsprotokolle nach~/.codex/history.jsonlZum Deaktivieren:

Beispiel

# Dateipfad: ~/.codex/config.toml
[history]
persistence = "none"

Begrenzt die Dateigröße (bei Überschreitung werden die ältesten Einträge verworfen und komprimiert):

Beispiel

# Dateipfad: ~/.codex/config.toml
[history]
max_bytes = 104857600  # 100 MiB

Anklickbare Quellenangaben

Wenn das Terminal oder der Editor dies unterstützt, kann Codex Dateiverweise als anklickbare Links darstellen.

Beispiel

# Dateipfad: ~/.codex/config.toml
# Optional: vscode, cursor, windsurf, vscode-insiders, none
file_opener = "vscode"

Nach der Einstellung wird der Verweis/home/example/project/main.py:42zuvscode://file/.../main.py:42umgeschrieben, und ein Klick in VS Code springt zu dieser Stelle.


Projektanweisungs-Erkennung (AGENTS.md)

Codex liestAGENTS.md(und zugehörige Dateien) und bringt Projektkonventionen automatisch in den "ersten Turn" der Sitzung ein.

Zwei zentrale Stellschrauben:

KonfigurationsschlüsselFunktionTypische Werte
project_doc_max_bytesMaximale Anzahl der pro AGENTS.md gelesenen BytesStandardmäßig ungefähr 32 KiB
project_doc_fallback_filenamesFallback-Dateiname, wenn AGENTS.md fehltZum BeispielCLAUDE.md

Optionen der Terminal-Benutzeroberfläche (TUI)

AusführencodexOhne Unterbefehl wird die interaktive TUI gestartet.[tui]Häufige Tasten sind in der Tabelle unten aufgeführt:

TasteFunktionOptionale Werte
tui.notificationsTUI-Benachrichtigungen aktivieren/deaktivieren; können nach Ereignistyp gefiltert werdenBoolean / Ereignistyp-Array
tui.notification_methodTerminal-Benachrichtigungsmethodeauto、osc9、bel
tui.notification_conditionAuslösebedingungunfocused、always
tui.animationsASCII-Animationen und Schimmer-Effektetrue / false
tui.alternate_screenOb der alternative Bildschirm verwendet werden soll (auf never setzen, um den Scroll-Verlauf beizubehalten)auto, always, never
tui.show_tooltipsOb die Willkommensseite Anfängertipps anzeigttrue / false

Schnellreferenztabelle für gängige Konfigurationen

Betrachten Sie diesen Abschnitt als Schnellreferenz-Checkliste zum Nachschlagen, wenn Sie etwas vergessen:

AnforderungenKonfigurationsort / Befehl
Modell wechseln--model gpt-5.4odermodel = "..."
Szenariobasierte Konfiguration--profile <name> + ~/.codex/<name>.config.toml
Ein beliebiges Feld vorübergehend ändern--config key=value(TOML-Syntax)
OpenAI-Endpunkt ändernopenai_base_url
Proxy/selbst erstellten Anbieter verbinden[model_providers.<id>] + model_provider
Lokales Ollama--oss + oss_provider
Sandbox deaktivieren (mit Vorsicht verwenden)sandbox_mode = "danger-full-access"
Anonyme Metriken deaktivieren[analytics] enabled = false
Verlauf deaktivieren[history] persistence = "none"
Feedback deaktivieren[feedback] enabled = false
Desktop-Benachrichtigungennotify = ["python3", "/path/to/notify.py"]

Häufig gestellte Fragen

Der auf Projektebene festgelegte model_provider wird nicht wirksam?

Aus Sicherheitsgründen werdenmodel_provider、model_providers、profile、notifyund andere sensible SchlüsselWerden in der .codex/config.toml auf Projektebene ignoriertund beim Start wird eine Warnung ausgegeben.

Verschiebe diese Schlüssel auf Benutzerebene~/.codex/config.tomlEinfach dort hinein.

Mit --config vorgenommene Änderungen haben keine Wirkung?

Prüfe drei Dinge: ob der Wert der TOML-Syntax entspricht (Arrays verwenden[], Strings verwenden"", Verschachtelung verwendet Punkte); ob die Shell mehrere Werte aufgeteilt hat, indem sie Leerzeichen als Trennzeichen behandelt hat; ob Schlüsselnamen korrekt geschrieben sind. Öffne~/.codex/logs/Unter den neuesten Protokollen kannst du die ursprüngliche Zeichenkette sehen, die nicht geparst werden konnte.

Nach dem Start mit einem Profile immer noch das Standardmodell?

Häufigste Ursache: Die Profile-Datei verwendet noch die alte[profiles.<name>]Tabelle, oder das Dateinamenssuffix ist nicht.config.toml. Ab 0.134.0 wird nur ... erkannt~/.codex/<name>.config.tomlFormat.

Warum unterliegt git commit weiterhin der Genehmigung, nachdem die Sandbox deaktiviert wurde?

Das Schließen vonsandbox_modewirkt sich nicht auf die Genehmigungsrichtlinie aus.git commitund andere Befehle können weiterhin eine Genehmigung erfordern, weilapproval_policy = "on-request"und löst eine Abfrage aus; wenn Sie "vollautomatische Commits" möchten, müssen Sie zusätzlich die Genehmigungsrichtlinie aufnever setzen。

Können benutzerdefinierte Modelle die gpt-5-Serie auswählen?

Es hängt vonbase_urlab, ob der Dienst, auf den es verweist, dies unterstützt. Codex selbst nimmt keine strenge Validierung desmodel-Feldes vor; entscheidend ist, ob Ihre Anbieterseite es erkennen und darauf reagieren kann.

Weitere Erweiterungen