1Das Prinzip: Harness behalten, Motor tauschen
Claude Code spricht mit seinem Modell über die Anthropic-Messages-API. Alles, was diese API anbietet, kann als Motor dienen — egal ob es bei Anthropic läuft, bei einem anderen Anbieter oder auf deinem Rechner.
Drei Umgebungsvariablen steuern das komplett:
| Variable | Wirkung |
|---|---|
ANTHROPIC_BASE_URL | Wohin Claude Code seine Requests schickt. Standard ist die Anthropic-API — hier trägst du deinen Proxy oder lokalen Server ein. |
ANTHROPIC_AUTH_TOKEN | Wird als Authorization: Bearer … mitgesendet. Das ist der Schlüssel für deinen Endpoint, nicht für Anthropic. |
ANTHROPIC_MODEL | Welches Modell der Endpoint ansteuern soll, z. B. gpt-5.6-sol oder qwen3-coder. |
Lokal: Ollama nativ
Seit Ollama v0.14 mit eingebautem Anthropic-Endpoint. Kein Proxy nötig, Daten bleiben im Haus. Der schnellste Einstieg.
Abo-Modelle: CLIProxyAPI
ChatGPT-/Codex-Abo als Motor in Claude Code — das Muster, das wir bei H24 produktiv fahren („claudex“). Mit Härtung.
Router für alles andere
claude-code-router oder LiteLLM, wenn du viele Provider mischen oder pro Aufgabe dynamisch routen willst.
--continue weitermachen — gleicher Verlauf, anderes Modell.
Kein Mischbetrieb in einer laufenden Session.
2Weg 1 — Lokales Modell mit Ollama (der einfachste)
Ollama bringt seit Version 0.14 (Januar 2026) einen nativen
/v1/messages-Endpoint im Anthropic-Format mit. Drei Befehle, fertig.
Ollama installieren und Modell laden
Nimm ein Modell mit mindestens 32k Kontextfenster — Coding-Agenten brauchen Platz.
Bewährt für Agentic Coding: qwen3-coder, alternativ aktuelle Llama- oder DeepSeek-Varianten.
# Linux
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3-coderClaude Code auf Ollama zeigen lassen
export ANTHROPIC_BASE_URL=http://localhost:11434
export ANTHROPIC_AUTH_TOKEN=ollama
claude --model qwen3-coderDas war's. Claude Code läuft jetzt komplett lokal — kein Token verlässt deinen Rechner.
Optional: als eigenen Befehl ablegen
Damit der Wechsel ein Wort ist statt drei Exporte (Beispiel ~/.local/bin/claude-local):
#!/bin/bash
export ANTHROPIC_BASE_URL=http://localhost:11434
export ANTHROPIC_AUTH_TOKEN=ollama
exec claude --model qwen3-coder "$@"/v1/messages-Endpoint — gleiches Prinzip, ANTHROPIC_BASE_URL auf den LM-Studio-Port zeigen lassen.
Realistische Erwartung: Lokale Modelle sind für fokussierte Coding-Aufgaben stark,
ersetzen aber kein Frontier-Modell bei komplexen Mehrschritt-Aufgaben. Hardware entscheidet:
ab ~16 GB VRAM wird es angenehm.
3Weg 2 — Abo-Modelle über CLIProxyAPI (das claudex-Muster)
So nutzt du GPT 5.6 aus einem ChatGPT-Abo als Motor in Claude Code. Genau dieses Setup fahren wir bei H24 produktiv, inklusive aller Härtungsschritte. CLIProxyAPI meldet sich per OAuth bei deinem Abo an und stellt die Modelle lokal als Anthropic-kompatible API bereit.
Release laden und Version pinnen
CLIProxyAPI von github.com/router-for-me/CLIProxyAPI (aktuelle Reihe v7.2.x). Nimm ein konkretes Release-Binary, verifiziere die Checksumme und pinne die Version — kein Auto-Update auf einem Server, auf dem Agenten arbeiten.
mkdir -p /opt/cliproxy && cd /opt/cliproxy
# Binary des gewünschten Releases laden (Beispiel), dann:
sha256sum -c checksums.txt
chmod +x cli-proxy-apiKonfiguration härten
Die Default-Config bindet auf 0.0.0.0 — damit stünde dein Abo-Zugang offen im Netz.
Diese config.yaml ist unsere geprüfte Minimal-Härtung:
host: "127.0.0.1" # NUR localhost — wichtigste Zeile der Datei
port: 8317
remote-management:
allow-remote: false
disable-control-panel: true
auth-dir: "/opt/cliproxy/auths" # chmod 700 — OAuth-Tokens liegen hier im Klartext!
api-keys:
- "<32-BYTE-ZUFALLSSCHLÜSSEL>" # openssl rand -hex 32
plugins:
enabled: false
debug: false
logging-to-file: false
usage-statistics-enabled: false
request-log: false # sonst landen Prompts im Log
request-retry: 3chmod 600 config.yaml
mkdir -p auths && chmod 700 authsBeim ChatGPT-Abo anmelden (Device-Login)
Funktioniert headless auf jedem Server — Code am Handy oder Laptop bestätigen, dauert zwei Minuten.
Der OAuth-Token landet danach im auths/-Verzeichnis.
./cli-proxy-api --config config.yaml --codex-device-loginAnaloge Login-Flows gibt es je nach Version für weitere Anbieter (z. B. Gemini) — aktuellen Stand in der CLIProxyAPI-Doku prüfen. Zusätzlich lassen sich OpenAI-kompatible Upstreams (OpenRouter, eigener vLLM) per Config einbinden.
Als systemd-Dienst betreiben
Mit Sandbox-Härtung, damit der Proxy nichts darf, was er nicht muss
(/etc/systemd/system/cliproxy.service):
[Unit]
Description=CLIProxyAPI (lokaler Multi-LLM-Proxy)
After=network.target
[Service]
Type=simple
ExecStart=/opt/cliproxy/cli-proxy-api --config /opt/cliproxy/config.yaml
WorkingDirectory=/opt/cliproxy
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/opt/cliproxy
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now cliproxy
# Pflicht-Check: lauscht der Proxy wirklich NUR auf localhost?
ss -tlnp | grep 8317 # muss 127.0.0.1:8317 zeigen, nicht 0.0.0.0Erster Test
curl -s http://127.0.0.1:8317/v1/models \
-H "Authorization: Bearer <DEIN-API-KEY>" | head
# … und direkt als Claude-Code-Session:
ANTHROPIC_BASE_URL=http://127.0.0.1:8317 \
ANTHROPIC_AUTH_TOKEN=<DEIN-API-KEY> \
ANTHROPIC_MODEL=gpt-5.6-sol claude4Der Wrapper: aus drei Exporten wird ein Befehl
Damit der Motorwechsel im Alltag ein Wort ist, kapseln wir das Setup in ein
Wrapper-Skript. Unseres heißt claudex — Claude Code mit Fremd-Motor.
Hier die generische, übertragbare Fassung (/usr/local/bin/claudex, chmod +x):
#!/bin/bash
# claudex — Claude Code mit alternativem Modell über lokalen Proxy.
# Native Claude-Abos werden NIEMALS durch diesen Proxy geleitet.
set -euo pipefail
PROXY_BASE=http://127.0.0.1:8317
DEFAULT_MODEL=gpt-5.6-sol
# API-Key aus geschützter Datei laden, nie hardcoden (chmod 600):
# PROXY_TOKEN=<dein-key>
set -a; . /etc/cliproxy.env; set +a
# Health-Check: klare Fehlermeldung statt kryptischem API-Error
if ! curl -fsS --max-time 3 -o /dev/null \
-H "Authorization: Bearer $PROXY_TOKEN" "$PROXY_BASE/v1/models"; then
echo "FEHLER: Proxy ($PROXY_BASE) nicht erreichbar. systemctl status cliproxy" >&2
exit 1
fi
export ANTHROPIC_BASE_URL="$PROXY_BASE"
export ANTHROPIC_AUTH_TOKEN="$PROXY_TOKEN"
export ANTHROPIC_MODEL="${CLAUDEX_MODEL:-$DEFAULT_MODEL}"
exec claude "$@"So fühlt sich das im Alltag an
claude # normale Session, natives Claude-Abo
claudex # gleiche Skills & Memory, GPT als Motor
claudex --continue # laufenden Verlauf mit GPT weiterführen
claude --continue # … und zurück auf Claude
CLAUDEX_MODEL=gpt-5.6-terra claudex # anderes Modell ad hocCLAUDE_CODE_MAX_OUTPUT_TOKENS=32000 im Wrapper
exportieren und früher kompaktieren lassen. Wir hinterlegen pro Modell ein Profil mit sicherem
Kontextfenster statt den Werbeangaben zu vertrauen.
5Weg 3 — Router, wenn es viele Provider werden
Sobald du mehr willst als „ein Zweitmotor“ — etwa günstige Modelle für Routinejobs und starke für Architekturfragen — lohnt ein Router vor den Providern.
| Tool | Stärke | Wann nehmen |
|---|---|---|
| claude-code-router | Speziell für Claude Code gebaut; OpenRouter, DeepSeek, Ollama, Gemini u. v. m.; Modellwechsel per /model in der Session |
Du willst pro Aufgabe dynamisch routen (z. B. Hintergrund-Tasks auf günstige Modelle) |
| LiteLLM Proxy | Team-Gateway: zentrale Keys, Budgets, Logging, 100+ Provider, Anthropic-Format-Ingress | Mehrere Nutzer/Server, Kostenkontrolle, vLLM-Backends ohne eigenes Anthropic-Format |
| CLIProxyAPI (Weg 2) | Abo-Logins (OAuth) statt API-Keys, mehrere Accounts mit Rotation | Du willst vorhandene Flatrate-Abos nutzen statt Pay-as-you-go-APIs |
Das Prinzip bleibt identisch: Der Router bietet lokal einen Anthropic-kompatiblen Endpoint an,
Claude Code zeigt per ANTHROPIC_BASE_URL darauf. Ein einmal gebauter Wrapper
funktioniert für alle drei Wege.
6Sicherheits-Checkliste
Ein LLM-Proxy bündelt Zugänge zu deinen teuersten Accounts. Entsprechend behandeln.
- Nur localhost binden (
127.0.0.1) und nach jedem Start mitss -tlnpverifizieren. Ein offener LLM-Proxy im Internet ist ein gefundenes Fressen. - Version pinnen, Checksumme prüfen, kein Auto-Update. Updates bewusst einspielen, Changelog lesen.
- Auth-Verzeichnis schützen: OAuth-Tokens liegen dort im Klartext →
chmod 700, Backups davon verschlüsseln. - API-Key des Proxys zufällig generieren (
openssl rand -hex 32), in einerchmod 600-Datei oder im Passwort-Manager halten — nie ins Skript, nie ins Git. - Request-Logging aus — sonst landen Prompts (inklusive Code und Daten) dauerhaft auf der Platte.
- Management-Panel und Plugins deaktivieren, wenn du sie nicht brauchst. Jede Fläche weniger.
- systemd-Sandbox nutzen:
ProtectSystem=strict,NoNewPrivileges=true, minimaleReadWritePaths. - Dedizierten Account für den Proxy-Login verwenden. Falls ein Anbieter die Duldung beendet, trifft eine Sperre nicht deinen Haupt-Zugang.
7Spielregeln & Risiken (Stand Juli 2026)
Claude-Abos: tabu für Proxys
Anthropic hat im Februar 2026 klargestellt und ab April aktiv durchgesetzt: OAuth-Tokens aus Claude-Free/Pro/Max-Accounts dürfen nicht in anderen Tools oder Proxys verwendet werden. Deshalb gilt in jedem Setup dieser Anleitung: Das native Claude-Abo läuft direkt zu Anthropic, niemals durch den Proxy. Pay-as-you-go-API-Keys sind davon nicht betroffen.
ChatGPT-Abos: öffentlich geduldet, nicht garantiert
Der Codex-Lead bei OpenAI hat 2026 öffentlich erklärt, dass die Nutzung von ChatGPT-Subscriptions in Dritt-Harnesses in Ordnung geht. Das ist ein Richtungssignal, keine vertragliche Zusage — die Duldung kann enden. Praktische Konsequenz: dediziertes Abo verwenden und den Weg zurück (natives Setup) jederzeit offenhalten.
Lokale Modelle: keine dieser Fragen
Bei Ollama & Co. gibt es kein Abo, keine Fremd-ToS und keinen Datenabfluss — dafür trägst du Hardware und Modellqualität selbst. Für sensible Daten (etwa DSGVO-kritische Verarbeitung) ist das der sauberste Weg.
8Troubleshooting
| Symptom | Ursache & Lösung |
|---|---|
| „API Error“ direkt beim Start | Proxy läuft nicht oder falscher Port. systemctl status cliproxy bzw. ollama serve prüfen; Health-Check im Wrapper fängt das mit klarer Meldung ab. |
| 401 / Unauthorized | ANTHROPIC_AUTH_TOKEN stimmt nicht mit dem api-keys-Eintrag der Proxy-Config überein — oder es ist zusätzlich ein ANTHROPIC_API_KEY gesetzt, der dazwischenfunkt (unsetzen). |
| Modell bricht mit Kontext-Fehlern ab | Claude Code nimmt ein größeres Fenster an, als das Modell liefert. Konservatives Profil setzen, CLAUDE_CODE_MAX_OUTPUT_TOKENS begrenzen, früher kompaktieren. |
| Login-Token abgelaufen | Device-Login einfach wiederholen; der Proxy refresht Tokens normalerweise selbst, nach längerer Downtime kann ein Re-Login nötig sein. |
| Lokales Modell antwortet wirr oder bricht Werkzeugaufrufe ab | Modell zu klein oder ohne Tool-Call-Training. Auf ein Agentic-Coding-Modell mit ≥32k Kontext wechseln (z. B. qwen3-coder). |
| Session „vergisst“ nach Motorwechsel nichts, verhält sich aber anders | Normal: gleicher Verlauf, anderes Modell mit anderen Stärken. Wichtige Zwischenstände vor dem Wechsel kurz zusammenfassen lassen. |