Ich möchte mit Codex eine kleine Webseite erstellen, die ich direkt im Browser öffnen kann. Dafür habe ich diese Anleitung vom Node.js-Download über die Installation von Codex CLI bis zur Verbindung mit CrazyRouter und zur ersten HTML-Datei aufgebaut.
1. Node.js herunterladen und installieren
Ich öffne die offizielle Downloadseite und wähle LTS → Windows → Windows Installer (.msi). Unter Einstellungen → System → Info finde ich den Systemtyp und wähle x64 oder ARM64.
Im Downloadordner öffne ich die MSI-Datei. Im Assistenten folgen Next, die Zustimmung zur Lizenz und die Standardkomponenten einschließlich npm und Add to PATH. Mit Install und anschließend Finish endet die Installation.
Ich schließe alte Terminals und öffne PowerShell über das Startmenü neu. Ich kopiere nur den Code, ohne den PS-Prompt, und drücke nach jeder Zeile Enter. Ist Node.js bereits installiert, beginne ich direkt mit diesen beiden Prüfungen:
node --version
npm.cmd --version
2. Codex CLI installieren
npm.cmd install -g @openai/codex@latest
codex.cmd --version
Ich warte auf das Ende der Installation, bevor ich die Version abfrage. Die Versionsnummer kann neuer sein als im Screenshot.
3. CrazyRouter in meinem Codex einrichten
Ich nutze mein eigenes CrazyRouter-Konto und prüfe dort den Zugriff auf das hier konfigurierte Modell gpt-5.6-sol.
Erzeuge einen API-Key in deinem eigenen CrazyRouter-Konto. Das Login-Passwort ist kein API-Key. Der folgende Block nimmt den Schlüssel ohne sichtbare Zeichen entgegen und setzt die beiden benötigten User-Variablen:
$codexKeySecure = Read-Host 'CrazyRouter API-Key einfügen und Enter drücken' -AsSecureString
$codexKeyPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($codexKeySecure)
try {
$codexKeyPlain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($codexKeyPointer)
if ([string]::IsNullOrWhiteSpace($codexKeyPlain)) { throw 'Kein Key eingegeben' }
[Environment]::SetEnvironmentVariable('OPENAI_API_KEY', $codexKeyPlain.Trim(), 'User')
[Environment]::SetEnvironmentVariable('OPENAI_BASE_URL', 'https://cn.crazyrouter.com/v1', 'User')
$env:OPENAI_API_KEY = $codexKeyPlain.Trim()
$env:OPENAI_BASE_URL = 'https://cn.crazyrouter.com/v1'
} finally {
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($codexKeyPointer)
$codexKeyPlain = $null
}
Prüfe nur, ob ein Wert existiert:
[bool]$env:OPENAI_API_KEY
$env:OPENAI_BASE_URL
True bestätigt weder Gültigkeit noch Berechtigung. Gib den Key nicht mit $env:OPENAI_API_KEY aus.
Vor der Konfiguration eine Sicherung erstellen:
$codexConfigDir = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $env:USERPROFILE '.codex' }
New-Item -ItemType Directory -Path $codexConfigDir -Force | Out-Null
$codexConfigFile = Join-Path $codexConfigDir 'config.toml'
if (Test-Path -LiteralPath $codexConfigFile) { Copy-Item -LiteralPath $codexConfigFile -Destination ($codexConfigFile + '.bak.' + (Get-Date -Format 'yyyyMMdd-HHmmss')) }
notepad.exe $codexConfigFile
In config.toml gehören diese Werte (bei vorhandenen Feldern ändern, nicht doppelt anlegen):
model = "gpt-5.6-sol"
model_provider = "crazyrouter"
[model_providers.crazyrouter]
name = "Crazyrouter"
base_url = "https://cn.crazyrouter.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
env_key ist der Variablenname, nicht der geheime Wert. model und model_provider stehen auf der obersten Ebene. Speichere als config.toml, nicht als config.toml.txt.
4. Codex im Projektordner starten
Öffne ein neues PowerShell-Fenster, lege einen eigenen Ordner an und starte Codex:
New-Item -ItemType Directory -Path "$env:USERPROFILE\CodexProjects\hello-codex" -Force
Set-Location "$env:USERPROFILE\CodexProjects\hello-codex"
Get-Location
codex.cmd --sandbox workspace-write --ask-for-approval on-request
Bei der Vertrauensfrage den angezeigten Ordner prüfen und erst dann bestätigen. In der realen Prüfung wurde der erste Schreibversuch vom Read-only-Sandbox blockiert, weil der neue Ordner noch nicht vertraut war. Erst nach Vertrauen und der eingeschränkten Windows-Sandbox-Konfiguration entstand die Datei.
Sende im Codex-Dialog zunächst nur:
Antworte ausschließlich mit CODEX_CONNECTION_OK.
Lies keine Dateien, ändere keine Dateien und führe keine Befehle aus.
Diese Antwort belegt eine reale Anfrage mit dem konfigurierten Provider. Die Versionsnummer allein tut das nicht.
5. Meine erste HTML-Seite erstellen
Sende danach den vollständigen Auftrag:
Erstelle index.html tatsächlich im aktuellen Arbeitsordner; gib den Code nicht nur im Chat aus.
Der Seitentitel lautet „我的第一个 Codex 网页“, sichtbar ist „你好,Codex“.
Füge den Button „点击打招呼“ ein. Nach dem Klick soll „按钮可以正常工作“ erscheinen.
CSS und JavaScript müssen in derselben HTML-Datei stehen. Keine externen Bilder, Fonts, Frameworks, CDNs oder Pakete.
Nur index.html erstellen oder ändern. Wenn Schreiben nicht erlaubt ist, melde die Einschränkung ausdrücklich.
Beende mit /quit und prüfe außerhalb von Codex:
Test-Path .\index.html
Start-Process .\index.html
Ich konnte index.html im Browser öffnen und den Button anklicken: Die Seite zeigte zuerst „你好,Codex“ und anschließend „按钮可以正常工作“. Am Ende der Sitzung erschien zusätzlich eine Meldung über fehlenden ursprünglichen Kontext; die gespeicherte Seite ließ sich trotzdem öffnen und bedienen.
6. Hilfe bei häufigen Startproblemen
| Beobachtung | Zuerst prüfen | Nicht als erste Reaktion |
|---|---|---|
node nicht gefunden |
Installation, Path, neues Terminal | Provider wechseln |
.ps1 blockiert |
.cmd-Starter verwenden |
Ausführungsschutz global deaktivieren |
| 401 | Key, Ziel-URL, Gültigkeit | Login-Passwort einsetzen |
| 403 | Konto- und Modellberechtigung, kompletter Text | Nur den Statuscode raten lassen |
| 404 / model not found | Base URL, Modell-ID, /v1
|
Node.js neu installieren |
| Antwort kommt, Schreiben scheitert | Ordnervertrauen, Sandbox, aktueller Pfad | Alle Berechtigungen freigeben |
False bei Test-Path
|
Get-Location, Dateiname, Endung |
Chat-Aussage als Beweis nehmen |






Top comments (0)