Zum Hauptinhalt springen
Codex CLI ist das offizielle Terminal-Coding-Tool von OpenAI. Nach der Anbindung von AIHubMix genügt ein einziger API-Key, um im Terminal Modelle von GLM, Claude, Gemini, DeepSeek u. a. aufzurufen und frei zu wechseln – ohne Bindung an einen einzigen Anbieter. Dieser Leitfaden behandelt zwei Wege: den Basis-Weg (Profile + ein festes Modell, am schnellsten) und den Weg mit benutzerdefinierten Modellen (eine model_catalog_json-Katalogdatei, um jederzeit aus der /model-Liste zu wechseln).

Installation

Offizieller Download (macOS-Version)

https://openai.com/en/codex/

Installation per Kommandozeile

Konfiguration der Umgebungsvariablen

Konfiguration über Konfigurationsdateien

  1. Bearbeiten Sie die Konfigurationsdatei ~/.codex/config.toml und fügen Sie die folgenden Einstellungen hinzu:
  1. Bearbeiten Sie die Konfigurationsdatei ~/.codex/auth.json und ändern Sie die folgenden Einstellungen:

Konfiguration via cc-switch

  1. Starten Sie CC-Switch und fügen Sie den Anbieter hinzu.
CC-Switch: Anbieter hinzufügen
  1. Wählen Sie aus der Voreinstellungsliste „AiHubMix”.
AiHubMix in der CC-Switch-Voreinstellungsliste auswählen
  1. Geben Sie Ihren Key in das Feld „API Key” ein und klicken Sie auf „Add”, um die Einstellungen zu speichern.
API-Key in CC-Switch eingeben und speichern
  1. Kehren Sie zur Startseite zurück, wählen Sie „AiHubMix” aus der Anbieterliste und klicken Sie auf „Enable”, um es zu verwenden.
AiHubMix-Anbieter in CC-Switch aktivieren

Codex verwenden

Verwendung im Terminal

  1. Öffnen Sie das Terminal, navigieren Sie in Ihr Projektverzeichnis und führen Sie den Befehl codex aus.
  1. Legen Sie die Berechtigungen nach Bedarf fest.
Berechtigungen beim Codex-Start festlegen
  1. Wählen Sie das benötigte Modell anhand Ihrer Anforderungen.
Zu verwendendes Modell in Codex auswählen
  1. Geben Sie natürliche Sprache ein; wenn Sie eine normale Antwort erhalten, war die Konfiguration erfolgreich.
Eingabe in natürlicher Sprache im Codex-Terminal mit normaler Antwort

Verwendung in der Codex-Desktop-App

  1. Öffnen Sie die Codex-Desktop-App und wählen Sie das Arbeitsverzeichnis.
  2. Geben Sie die Aufgabe in das Eingabefeld ein; wenn Sie eine normale Antwort erhalten, war die Konfiguration erfolgreich.
Aufgabe in Codex Desktop eingeben mit normaler Antwort

Nützliche Befehlsreferenzen

Hilfe-Befehl

Vollständige Befehlsoptionen

Benutzerdefinierte Modelle in Codex verwenden

Standardmäßig zeigt Codex in der /model-Liste nur die offiziellen OpenAI-Modelle an. Wenn Sie direkt aus der Liste ein beliebiges Modell auf AIHubMix auswählen möchten (GLM, Claude, Gemini, DeepSeek, Kimi, Qwen …), können Sie den offiziell unterstützten Mechanismus für „benutzerdefinierte Modelle” nutzen: Sie deklarieren die auswählbaren Modelle über eine lokale JSON-Datei (model_catalog_json) und leiten die Anfragen mit [model_providers.aihubmix] an AIHubMix weiter.
Offizielle Dokumentation: Advanced Configuration · OSS mode / local providers

Zwei Anbindungswege

Der Abschnitt „Konfiguration der Umgebungsvariablen” weiter oben beschreibt den grundlegenden Weg, dieser Abschnitt beschreibt den Weg über benutzerdefinierte Modelle. Die Unterschiede sind wie folgt – wählen Sie nach Bedarf: Der gesamte Ablauf besteht aus nur 4 Schritten: Katalogdatei erzeugen → config.toml anpassen → Umgebungsvariable setzen → neu starten und Modell auswählen.

Schritt 1: Modellkatalog-Datei erzeugen

Die Katalogdatei hat die Struktur { "models": [ ... ] }, wobei jedes Element im Array ein Modell beschreibt, das in /model ausgewählt werden kann. Im Folgenden erklären wir zunächst die Felder anhand eines festen Modells und geben anschließend ein Skript zum Batch-Generieren der Top 30.

1.1 Zuerst das Format verstehen: ein festes Modell

Im Folgenden sehen Sie einen nachweislich von Codex parsbaren minimalen vollständigen Katalog (enthält nur das eine Modell glm-5.2). Speichern Sie ihn einfach als ~/.codex/model-catalogs/custom-models.json, dann ist er einsatzbereit; für weitere Modelle hängen Sie einfach weitere Einträge mit derselben Struktur an das models-Array an.
Felderläuterung (die Felder, die Sie üblicherweise ändern):
Die übrigen Felder sind verpflichtend und haben feste Werte: base_instructions, availability_nux, upgrade, supports_reasoning_summaries, support_verbosity, default_verbosity, apply_patch_tool_type, truncation_policy, supports_parallel_tool_calls, experimental_supported_tools. Neuere Codex-Versionen (verifiziert mit codex-cli 0.130.0) parsen streng – fehlt auch nur eines davon, wird der gesamte Katalog verworfen und auf den integrierten Katalog zurückgefallen, mit einer Fehlermeldung in der Art missing field base_instructions; das äußert sich darin, dass „in /model kein einziges benutzerdefiniertes Modell zu sehen ist”. Aus diesem Beispiel dürfen daher keine weiteren Felder entfernt werden.
Zu base_instructions: Dies ist der System-Prompt des jeweiligen Modells. Im Beispiel steht ein Platzhaltersatz, mit dem das Modell normal läuft; wenn Sie ein Codierverhalten möglichst nah am nativen Codex möchten, ersetzen Sie ihn durch die vollständigen base_instructions eines beliebigen integrierten Modells aus codex debug models --bundled (genau das macht das Batch-Skript im nächsten Abschnitt).
Der offizielle Katalog verwendet snake_case-Felder (display_name, supported_in_api, visibility). Zwei Fehlerarten führen dazu, dass der gesamte Katalog verworfen wird und in /model keine Modelle erscheinen: fehlende Pflichtfelder melden missing field ...; veraltete camelCase-Formate wie displayName, hidden oder unbekannte Werte melden unknown variant .... Halten Sie sich einfach an den Feldsatz in diesem Artikel, um beides zu vermeiden.

1.2 Top 30 im Batch generieren

Mehrere Einträge von Hand zu schreiben, führt leicht zu fehlenden Feldern. Um die ersten 30 LLMs aus der AIHubMix-Modelllisten-API auf einen Schlag in den Katalog zu schreiben, verwenden Sie das folgende Skript – es klont ein integriertes Modell als Vorlage, sodass die Pflichtfelder (einschließlich der korrekten base_instructions) von Haus aus vollständig sind und über alle Codex-Versionen hinweg nicht fehlen. Benötigt werden curl, python3 und die installierte codex-CLI:
Das Skript überschreibt nur die je Modell spezifischen Felder (slug, display_name, description, context_window usw.), alle übrigen Pflichtfelder werden aus der integrierten Vorlage geklont – genau der Feldsatz aus Abschnitt 1.1, nur dass base_instructions der vollständige offizielle Prompt ist.
Die erzeugte Datei ist relativ groß (jeder Eintrag enthält die vollständigen base_instructions, etwa 1–2 MB), das ist normal. Prüfen Sie nach dem Ausführen mit codex debug models, ob sie korrekt geparst wird (siehe Schritt 5).
Die Zeile mit dem image_generation-Filter im Skript ist bewusst beibehalten: In der Antwort von type=llm tragen einige wenige Modelle gleichzeitig das image_generation-Label (z. B. gpt-image-2), die nicht für Dialoge geeignet sind; das Skript überspringt diese automatisch und nimmt dann die ersten 30.

Schritt 2: config.toml anpassen

Bearbeiten Sie ~/.codex/config.toml, fügen Sie auf Wurzelebene model_catalog_json hinzu und definieren Sie den aihubmix-Provider:
wire_api = "responses" ist entscheidend; fehlt es oder steht dort chat, kommt keine Verbindung zustande. Neuere Codex-Versionen nutzen ausschließlich OpenAIs Responses API (/v1/responses), und AIHubMix ist nativ mit der Responses API kompatibel – daher genügt es, direkt auf https://aihubmix.com/v1 zu verweisen, ohne einen eigenen Konvertierungs-Proxy aufzusetzen.
Wenn Sie zugleich ein Standardmodell und eine Standard-Reasoning-Stufe festlegen möchten (direkt beim Start aktiv, ohne jedes Mal manuell auszuwählen), können Sie diese vollständigere Konfiguration verwenden:
Nach der Konfiguration sieht config.toml ungefähr so aus (die roten Rahmen markieren die Kernpunkte dieses Schritts: die model / model_provider / model_catalog_json auf Wurzelebene sowie den Abschnitt [model_providers.aihubmix]): model_catalog_json und aihubmix-Provider-Konfiguration in config.toml

Schritt 3: Umgebungsvariable setzen

Setzen Sie die oben mit env_key angegebene Umgebungsvariable (achten Sie darauf, dass um das = herum keine Leerzeichen stehen):
Es empfiehlt sich, sie zur Persistenz in ~/.zshrc / ~/.bashrc einzutragen. Den Key erhalten Sie in der AIHubMix-Konsole.

Schritt 4: Neu starten und Modell auswählen

Starten Sie die Codex-App / das TUI neu, damit die Katalogdatei wirksam wird, dann:
Nach Eingabe von /model werden alle in der Katalogdatei deklarierten Modelle aufgelistet; mit den Pfeiltasten auswählen und mit Enter bestätigen: Codex /model-Auswahl mit der AIHubMix-Liste benutzerdefinierter Modelle Nach Auswahl eines Modells lässt /model Sie zusätzlich die Reasoning-Stufe (Effort) wählen; wählen Sie je nach Bedarf low / medium / high.

Schritt 5: Überprüfen, ob es wirkt

  1. Geben Sie nach dem Start von Codex /model ein, vergewissern Sie sich, dass die in der Katalogdatei deklarierten Modelle sichtbar sind, und wechseln Sie zu einem davon (z. B. glm-5.2).
  2. Stellen Sie eine beliebige Frage, um die Verbindung zu prüfen. Beachten Sie: Verlassen Sie sich nicht auf „Welches Modell bist du?” – in base_instructions steht „You are Codex… based on GPT-5”, sodass sich alle Modelle entsprechend als GPT-5 ausgeben; die Frage gibt also keinen Aufschluss über das tatsächliche Modell. Um das wirklich aufgerufene Modell zu bestätigen, melden Sie sich in der AIHubMix-Konsole an und sehen Sie auf der Seite „Logs” die model_id dieses Anfrageeintrags – das ist die Wahrheit.
Nach erfolgreichem Wechsel erscheint oben der Hinweis Model changed to ..., und die Statusleiste unten zeigt ebenfalls das aktuelle Modell und das Kontextfenster an (im Bild unten wurde zu glm-5.2 gewechselt, Fenster 258K): Codex-Sitzung und Statusleiste nach Wechsel zu glm-5.2

Häufige Fragen zu benutzerdefinierten Modellen

  • In /model sind die benutzerdefinierten Modelle nicht zu sehen? Gehen Sie der Reihe nach vor:
    1. Führen Sie zuerst codex debug models aus. Meldet es missing field ... (am häufigsten, fehlendes Pflichtfeld) oder unknown variant ... (falscher Feldname / Wert), ist der gesamte Katalog beim Parsen fehlgeschlagen und wurde verworfen – erzeugen Sie ihn mit dem Skript „integrierte Vorlage klonen” aus Schritt 1 einfach neu.
    2. Vergewissern Sie sich, dass model_catalog_json in config.toml auf Wurzelebene steht und nicht in einem [model_providers.*]-Abschnitt;
    3. Vergewissern Sie sich, dass das JSON die offiziellen snake_case-Felder verwendet und visibility auf list steht;
    4. Wenn codex debug models bereits alle Modelle anzeigt, in der Desktop-App aber nur ein oder zwei übrig bleiben und das aktuelle Modell als „benutzerdefiniert” erscheint – das ist ein bekannter Bug der Desktop-App: Sie legt über den lokalen Katalog hinaus noch eine Whitelist-Filterung auf offizielle Slugs und entfernt nicht-offizielle Modelle aus dem Auswahlmenü (siehe GitHub Issue #19694, #15138). Das Modell wird dabei tatsächlich weiterhin gemäß dem model = "..." in config.toml korrekt aufgerufen (in den AIHubMix-Logs nachweisbar), nur der Name wird nicht angezeigt. Für die korrekte Anzeige verwenden Sie die Terminal-codex-CLI / das TUI; in der Desktop-App können Sie nur direkt in config.toml ein festes model = "Ihr gewünschtes Modell" eintragen, bis es offiziell behoben ist.
  • Der Katalog „ersetzt”, nicht „ergänzt”. model_catalog_json ersetzt die gesamte Modellliste, statt anzuhängen (in der Praxis getestet: stehen im Katalog nur 2 Modelle, zeigt codex debug models auch nur diese 2 – die integrierten gpt-5.x verschwinden alle). Wenn Sie beides möchten, schreiben Sie sie zusammen in den benutzerdefinierten Katalog.
  • Anfrage meldet Protokollfehler / keine Verbindung. Meist ist base_url oder wire_api des Providers falsch konfiguriert. Für AIHubMix muss es wire_api = "responses" + base_url = "https://aihubmix.com/v1" sein. Wenn Sie einen Drittanbieter anbinden, der nur Chat Completions unterstützt, benötigen Sie einen lokalen Konvertierungs-Proxy; AIHubMix-Nutzer brauchen diesen Schritt nicht.
  • Häufiges „Reconnecting”. In manchen Netzwerk-/Proxy-Umgebungen funktioniert WebSocket (WSS) nicht; fügen Sie im Provider-Abschnitt supports_websockets = false hinzu, um HTTP zu erzwingen.
  • Parsing meldet missing field ... (z. B. missing field base_instructions). Dem Eintrag fehlt ein Pflichtfeld. Neuere Codex-Versionen parsen streng; base_instructions, availability_nux, upgrade, supports_reasoning_summaries, support_verbosity, default_verbosity, apply_patch_tool_type, truncation_policy, supports_parallel_tool_calls, experimental_supported_tools usw. müssen alle vorhanden sein. Mit dem Skript „integrierte Vorlage klonen” aus Schritt 1 lässt sich das auf einen Schlag ergänzen.
  • Parsing meldet unknown variant. Im Katalog-JSON gibt es einen Feldnamen oder Wert, den Codex nicht kennt (häufig veraltete camelCase-Formate wie displayName / hidden). Wechseln Sie einfach zum snake_case-Feldsatz aus diesem Artikel.

Referenzartikel


Zuletzt aktualisiert: 2026-06-25