> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aihubmix.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tutorial: AIHubMix in Codex CLI einbinden

> AIHubMix in Codex CLI einbinden: mit einem einzigen API-Key GLM, Claude, Gemini, DeepSeek u. a. frei aus der /model-Liste wechseln. Mit config.toml-Konfiguration, einem Skript zum Erzeugen des model_catalog_json-Katalogs und FAQ zur Fehlerbehebung.

[Codex CLI](https://openai.com/codex/) 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/](https://openai.com/en/codex/)

### Installation per Kommandozeile

```bash theme={null}
npm install -g @openai/codex
```

## Konfiguration der Umgebungsvariablen

### Konfiguration über Konfigurationsdateien

1. Bearbeiten Sie die Konfigurationsdatei `~/.codex/config.toml` und fügen Sie die folgenden Einstellungen hinzu:

```toml theme={null}
profile = "aihubmix"

[model_providers.aihubmix]
name = "aihubmix"
base_url = "https://aihubmix.com/v1"
personality = "pragmatic"
wire_api = "responses"

[profiles.aihubmix]
model = "gpt-5.2"
model_provider = "aihubmix"
model_reasoning_effort = "high"
```

2. Bearbeiten Sie die Konfigurationsdatei `~/.codex/auth.json` und ändern Sie die folgenden Einstellungen:

```json theme={null}
{
  "OPENAI_API_KEY": "AIHUBMIX_API_KEY"
}
```

### Konfiguration via cc-switch

1. Starten Sie CC-Switch und fügen Sie den Anbieter hinzu.

<img src="https://mintcdn.com/aihubmix/6eDqXeEJ1CQbrUrL/public/en/codex-1.png?fit=max&auto=format&n=6eDqXeEJ1CQbrUrL&q=85&s=52fcb1c4936560b4c99c01298d9383f1" alt="CC-Switch: Anbieter hinzufügen" width="2072" height="1374" data-path="public/en/codex-1.png" />

2. Wählen Sie aus der Voreinstellungsliste „AiHubMix".

<img src="https://mintcdn.com/aihubmix/6eDqXeEJ1CQbrUrL/public/en/codex-2.png?fit=max&auto=format&n=6eDqXeEJ1CQbrUrL&q=85&s=6034cfb95d693961830a7097f960e334" alt="AiHubMix in der CC-Switch-Voreinstellungsliste auswählen" width="2072" height="1374" data-path="public/en/codex-2.png" />

3. Geben Sie Ihren Key in das Feld „API Key" ein und klicken Sie auf „Add", um die Einstellungen zu speichern.

<img src="https://mintcdn.com/aihubmix/6eDqXeEJ1CQbrUrL/public/en/codex-3.png?fit=max&auto=format&n=6eDqXeEJ1CQbrUrL&q=85&s=97edc946e934f83194e31c9c326e803a" alt="API-Key in CC-Switch eingeben und speichern" width="2072" height="1374" data-path="public/en/codex-3.png" />

4. Kehren Sie zur Startseite zurück, wählen Sie „AiHubMix" aus der Anbieterliste und klicken Sie auf „Enable", um es zu verwenden.

<img src="https://mintcdn.com/aihubmix/6eDqXeEJ1CQbrUrL/public/en/codex-4.png?fit=max&auto=format&n=6eDqXeEJ1CQbrUrL&q=85&s=4b37a7c4ba042c2f2d32b51da4eb2469" alt="AiHubMix-Anbieter in CC-Switch aktivieren" width="2072" height="1374" data-path="public/en/codex-4.png" />

## Codex verwenden

### Verwendung im Terminal

1. Öffnen Sie das Terminal, navigieren Sie in Ihr Projektverzeichnis und führen Sie den Befehl `codex` aus.

```bash theme={null}
cd /your/project/path
codex
```

2. Legen Sie die Berechtigungen nach Bedarf fest.

<img src="https://mintcdn.com/aihubmix/7hQ6_nS3fMExXVXm/public/cn/codex-5.png?fit=max&auto=format&n=7hQ6_nS3fMExXVXm&q=85&s=ae7c5f193d3aa5c8723c879840732d78" alt="Berechtigungen beim Codex-Start festlegen" width="1212" height="814" data-path="public/cn/codex-5.png" />

3. Wählen Sie das benötigte Modell anhand Ihrer Anforderungen.

<img src="https://mintcdn.com/aihubmix/7hQ6_nS3fMExXVXm/public/cn/codex-6.png?fit=max&auto=format&n=7hQ6_nS3fMExXVXm&q=85&s=f942ebc707063463a3961347f8379553" alt="Zu verwendendes Modell in Codex auswählen" width="1212" height="814" data-path="public/cn/codex-6.png" />

4. Geben Sie natürliche Sprache ein; wenn Sie eine normale Antwort erhalten, war die Konfiguration erfolgreich.

<img src="https://mintcdn.com/aihubmix/7hQ6_nS3fMExXVXm/public/cn/codex-8.png?fit=max&auto=format&n=7hQ6_nS3fMExXVXm&q=85&s=bf06aaa8c86834b20e5fef26fba84d50" alt="Eingabe in natürlicher Sprache im Codex-Terminal mit normaler Antwort" width="1212" height="814" data-path="public/cn/codex-8.png" />

### 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.

<img src="https://mintcdn.com/aihubmix/7hQ6_nS3fMExXVXm/public/cn/codex-9.png?fit=max&auto=format&n=7hQ6_nS3fMExXVXm&q=85&s=673289a767cd354a686d1e547a364e0d" alt="Aufgabe in Codex Desktop eingeben mit normaler Antwort" width="2632" height="1712" data-path="public/cn/codex-9.png" />

## Nützliche Befehlsreferenzen

### Hilfe-Befehl

```bash theme={null}
codex -h
```

### Vollständige Befehlsoptionen

```bash theme={null}
Usage
  $ codex [options] <prompt>

Options
  -h, --help                 Show help information and exit
  -m, --model <model>        Specify the model to use (default: codex-mini-latest)
  -i, --image <path>         Path to the file containing image input
  -v, --view <rollout>       View previously saved session records
  -q, --quiet                Non-interactive mode, only prints the final output of the assistant
  -a, --approval-mode <mode> Override approval policy: 'suggest', 'auto-edit', or 'full-auto'

  --auto-edit                Automatically approve file edits; will still prompt for command confirmation
  --full-auto                Automatically approve edits and commands in sandbox environment

  --no-project-doc           Do not automatically include 'codex.md' file from the repository
  --project-doc <file>       Include specified Markdown file as context
  --full-stdout              Do not truncate stdout/stderr of command output

Dangerous Options
  --dangerously-auto-approve-everything
                             Skip all confirmation prompts and execute commands directly (no sandbox protection)
                             For use only in temporary local testing environments

Experimental Options
  -f, --full-context         Start in "full context" mode, loading the entire repository into context
                             and applying bulk edits in a single operation
                             Only compatible with --model parameter

Examples
  $ codex "Write and run a Python program that prints ASCII art"
  $ codex -q "Fix build issues"
```

<h2 id="custom-models">
  Benutzerdefinierte Modelle in Codex verwenden
</h2>

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](https://developers.openai.com/codex/config-advanced)

### 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:

|                      | Grundlegender Weg (Profil + einzelnes Modell)         | Benutzerdefinierter Weg (dieser Abschnitt)                 |
| -------------------- | ----------------------------------------------------- | ---------------------------------------------------------- |
| Konfigurationsinhalt | In `config.toml` ein festes `model = "xxx"` eintragen | Zusätzlich eine `model_catalog_json`-Katalogdatei pflegen  |
| Modell wechseln      | Konfigurationsdatei ändern und neu starten            | Direkt in der `/model`-Liste auswählen, jederzeit wechseln |
| Geeignetes Szenario  | Langfristig ein festes Modell nutzen                  | Häufig zwischen mehreren Modellen vergleichen / wechseln   |
| Komplexität          | Niedrig                                               | Mittel                                                     |

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.

```json theme={null}
{
  "models": [
    {
      "slug": "glm-5.2",
      "display_name": "GLM 5.2",
      "description": "GLM 5.2 (via AIHubMix)",
      "context_window": 1000000,
      "max_context_window": 1000000,
      "supported_reasoning_levels": [
        { "effort": "low",    "description": "Fast responses" },
        { "effort": "medium", "description": "Balanced" },
        { "effort": "high",   "description": "Deeper reasoning" }
      ],
      "shell_type": "shell_command",
      "visibility": "list",
      "supported_in_api": true,
      "priority": 0,
      "availability_nux": null,
      "upgrade": null,
      "base_instructions": "You are Codex, a coding agent.",
      "supports_reasoning_summaries": true,
      "support_verbosity": false,
      "default_verbosity": null,
      "apply_patch_tool_type": null,
      "truncation_policy": { "mode": "tokens", "limit": 10000 },
      "supports_parallel_tool_calls": true,
      "experimental_supported_tools": []
    }
  ]
}
```

Felderläuterung (die Felder, die Sie üblicherweise ändern):

| Feld                                    | Funktion                                                                                                                                                        | Aus der API      |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `slug`                                  | Modell-ID, mit der Codex die Anfrage stellt; muss exakt mit dem von der API zurückgegebenen `model_id` übereinstimmen                                           | `model_id`       |
| `display_name`                          | Der in der `/model`-Liste angezeigte Name                                                                                                                       | `model_name`     |
| `context_window` / `max_context_window` | Kontextfenster. **Ohne Angabe wird auf einen sehr kleinen, konservativen Standardwert zurückgefallen**; empfohlen wird, den echten Wert aus der API einzutragen | `context_length` |
| `supported_reasoning_levels`            | Reasoning-Stufen; nach dem Modellwechsel kann über `/model` weiterhin die Effort-Stufe gewählt werden                                                           | —                |
| `visibility`                            | Nur bei `list` erscheint das Modell im Auswahlmenü                                                                                                              | —                |
| `priority`                              | Sortierung in der Liste; je kleiner die Zahl, desto weiter vorne                                                                                                | —                |

<Warning>
  **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.
</Warning>

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).

<Note>
  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.
</Note>

#### 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](https://aihubmix.com/api/v1/models?type=llm) 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:

```bash theme={null}
mkdir -p ~/.codex/model-catalogs

# 1) Ein integriertes Modell als Vorlage holen: es bringt base_instructions und alle weiteren Pflichtfelder mit
codex debug models --bundled > /tmp/_tpl.json

# 2) Die AIHubMix-Modellliste abrufen
curl -s "https://aihubmix.com/api/v1/models?type=llm" > /tmp/_aihubmix.json

# 3) Die Vorlage klonen und Einträge einzeln erzeugen, dabei nur die je Modell spezifischen Felder überschreiben
python3 - <<'PY' > ~/.codex/model-catalogs/custom-models.json
import json, sys
tpl = json.load(open("/tmp/_tpl.json"))["models"][0]   # beliebiges integriertes Modell als Vorlage
api = json.load(open("/tmp/_aihubmix.json"))["data"]
# Bildgenerierungsmodelle überspringen (types enthält image_generation), dann die ersten 30 nehmen
api = [m for m in api if "image_generation" not in (m.get("types") or "")][:30]
out = []
for i, m in enumerate(api):
    e = dict(tpl)                                       # alle Felder der Vorlage klonen
    ctx = m.get("context_length") or 200000
    e["slug"] = m["model_id"]                           # muss mit model_id der API übereinstimmen
    e["display_name"] = m.get("model_name") or m["model_id"]
    e["description"] = (m.get("model_name") or m["model_id"]) + " (via AIHubMix)"
    e["context_window"] = ctx
    e["max_context_window"] = ctx
    e["visibility"] = "list"
    e["supported_in_api"] = True
    e["priority"] = i
    e["availability_nux"] = None
    e["upgrade"] = None
    out.append(e)
json.dump({"models": out}, sys.stdout, ensure_ascii=False, indent=2)
PY
```

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:

```toml theme={null}
# ⚠️ model_catalog_json muss auf Wurzelebene stehen und darf nicht in einen [model_providers.*]-Abschnitt
model_provider = "aihubmix"
model_catalog_json = "~/.codex/model-catalogs/custom-models.json"

[model_providers.aihubmix]
name = "Aihubmix"
base_url = "https://aihubmix.com/v1"
wire_api = "responses"
env_key = "AIHUBMIX_API_KEY"
```

<Note>
  `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.
</Note>

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:

```toml theme={null}
model = "glm-5.2"                   # Standardmodell beim Start, muss in der Katalogdatei vorhanden sein
model_provider = "aihubmix"
model_catalog_json = "~/.codex/model-catalogs/custom-models.json"
model_reasoning_effort = "high"     # Standard-Reasoning-Stufe: minimal / low / medium / high

[model_providers.aihubmix]
name = "Aihubmix"
base_url = "https://aihubmix.com/v1"
wire_api = "responses"
env_key = "AIHUBMIX_API_KEY"
```

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]`):

<img src="https://mintcdn.com/aihubmix/PeZeZbJsaqYscnhN/public/cn/codex-10.png?fit=max&auto=format&n=PeZeZbJsaqYscnhN&q=85&s=99e8036e8d784448f3fd383b5f37026f" alt="model_catalog_json und aihubmix-Provider-Konfiguration in config.toml" width="1530" height="944" data-path="public/cn/codex-10.png" />

### Schritt 3: Umgebungsvariable setzen

Setzen Sie die oben mit `env_key` angegebene Umgebungsvariable (achten Sie darauf, dass um das `=` herum keine Leerzeichen stehen):

```bash theme={null}
export AIHUBMIX_API_KEY=sk-xxx
```

Es empfiehlt sich, sie zur Persistenz in `~/.zshrc` / `~/.bashrc` einzutragen. Den Key erhalten Sie in der [AIHubMix-Konsole](https://aihubmix.com/token).

### Schritt 4: Neu starten und Modell auswählen

Starten Sie die Codex-App / das TUI neu, damit die Katalogdatei wirksam wird, dann:

```bash theme={null}
codex
# Geben Sie in der interaktiven Oberfläche /model ein, um die im vorherigen Schritt deklarierten 30 Modelle zu sehen und zu wechseln
```

Nach Eingabe von `/model` werden alle in der Katalogdatei deklarierten Modelle aufgelistet; mit den Pfeiltasten auswählen und mit Enter bestätigen:

<img src="https://mintcdn.com/aihubmix/PeZeZbJsaqYscnhN/public/cn/codex-11.png?fit=max&auto=format&n=PeZeZbJsaqYscnhN&q=85&s=2c0a5e3b8a888143804fc80c224c0635" alt="Codex /model-Auswahl mit der AIHubMix-Liste benutzerdefinierter Modelle" width="1634" height="818" data-path="public/cn/codex-11.png" />

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](https://aihubmix.com/token) 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):

<img src="https://mintcdn.com/aihubmix/PeZeZbJsaqYscnhN/public/cn/codex-12.png?fit=max&auto=format&n=PeZeZbJsaqYscnhN&q=85&s=87d4195c2762ccfbcf48df5312a34aa9" alt="Codex-Sitzung und Statusleiste nach Wechsel zu glm-5.2" width="1628" height="1386" data-path="public/cn/codex-12.png" />

## 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](https://github.com/openai/codex/issues/19694), [#15138](https://github.com/openai/codex/issues/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

* Offizielle Dokumentation: [Advanced Configuration](https://developers.openai.com/codex/config-advanced) ｜ [Configuration Reference](https://developers.openai.com/codex/config-reference)
* Referenz für das offizielle integrierte Katalogformat: [codex-rs/models-manager/models.json](https://github.com/openai/codex/blob/main/codex-rs/models-manager/models.json)
* Community-Leitfaden: [Codex config.toml: einen beliebigen benutzerdefinierten Provider in 6 Zeilen anbinden](https://www.morphllm.com/codex-provider-configuration)

***

Zuletzt aktualisiert: 2026-06-25
