claude-launcher-profiles/BEDIENUNGSANLEITUNG.md
dschlueter 1f9a874df6 docs: add user manual with setup, profiles, and cost/quality comparison
Practical step-by-step guide for switching Claude Code to cheaper
OpenRouter models (GLM-5.2, Kimi K2.7-code, DeepSeek V3.1, Qwen3 Coder)
while keeping the Anthropic Pro login. Includes verified pricing
(June 2026, from OpenRouter API), a worked cost example, a quality
assessment, and troubleshooting.

Notable callouts verified by live API tests:
- moonshotai/kimi-k2.7-code is the current, valid slug (newer than k2.6).
- openrouter/free is a meta-slug that may route to a non-coding model
  (e.g. nvidia/nemotron-3.5-content-safety); qwen3-coder:free is the
  safer free choice for coding, though rate-limited.
- Reasoning models can exhaust max_tokens in the thinking step.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-28 03:43:36 +02:00

253 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bedienungsanleitung claude-launcher-profiles
> Claude Code mit günstigen Alternativ-Modellen statt der teuren Anthropic-API nutzen.
> Pro-Login bleibt erhalten; OpenRouter-Modelle werden über einfache Profile zugeschaltet.
---
## 1. Wozu dieses Repository?
Claude Code ist der CLI-Client von Anthropic. Er spricht standardmäßig die Anthropic-API an und die ist teuer:
| Anthropic-Modell | Input / 1M Tok | Output / 1M Tok |
|---|---|---|
| Claude Opus 4.5 | $5.00 | $25.00 |
| Claude Sonnet 4.5 | $3.00 | $15.00 |
Dieses Repo schaltet Claude Code stattdessen auf **OpenRouter** um. Dort laufen u. a. starke Open-Source- und Drittanbieter-Modelle, die für viele Coding-Aufgaben qualitativ nah an Claude heranreichen aber **ein Vielfaches günstiger** sind:
| OpenRouter-Modell | Input / 1M Tok | Output / 1M Tok | Kontext |
|---|---|---|---|
| `z-ai/glm-5.2` | $0.95 | $3.00 | 1 M |
| `moonshotai/kimi-k2.7-code` | $0.74 | $3.50 | 262 K |
| `deepseek/deepseek-chat-v3.1` | $0.21 | $0.79 | 164 K |
| `qwen/qwen3-coder` | $0.22 | $1.80 | 1 M |
| `qwen/qwen3-coder:free` | **gratis** | **gratis** | 1 M |
Konkret: GLM-5.2 ist im Output rund **5× günstiger als Sonnet 4.5** und rund **8× günstiger als Opus 4.5**; DeepSeek V3.1 im Output sogar rund **19× günstiger als Sonnet**. Wer es nur ausprobieren will, nutzt `qwen3-coder:free` ganz ohne Kreditkarte.
> **Live-Beweis:** Dieses Dokument wurde in einer Claude-Code-Session verfasst, die selbst über `z-ai/glm-5.2` via OpenRouter lief das Setup funktioniert also genau wie beschrieben.
Mit diesem Repo wählst du das Modell über ein Profil:
```bash
claude-pro # Anthropic Pro-Login (wie gehabt, kein API-Kosten)
claude-glm # GLM-5.2 über OpenRouter
claude-kimi # Kimi K2 über OpenRouter
claude-free # kostenloses Modell über OpenRouter
claude-profile <name> # generischer Aufruf
```
---
## 2. Voraussetzungen
- `claude` (Claude Code CLI) installiert
- funktionierendes **Claude-Pro-Login** (nur für das `pro`-Profil nötig)
- `bash`
- `yq` zum Parsen der YAML-Konfiguration
- ein **OpenRouter-Account + API-Key** (nur für die OpenRouter-Profile)
→ Key anlegen unter https://openrouter.ai/keys
`yq` installieren (Debian/Ubuntu):
```bash
sudo apt-get update
sudo apt-get install -y yq
```
> Hinweis: Unter Debian/Ubuntu ist `yq` der *jq-Wrapper* („Command-line YAML processor jq wrapper"). Das funktioniert. Der *MikeFarah-yq* geht ebenfalls.
---
## 3. Setup Schritt für Schritt
### 3.1 Repository klonen
```bash
git clone https://kitux.de/forgejo/dschlueter/claude-launcher-profiles.git
cd claude-launcher-profiles
```
### 3.2 Konfiguration anlegen
```bash
cp config/profiles.example.yml config/profiles.yml
$EDITOR config/profiles.yml
```
`config/profiles.yml` enthält **keine** API-Keys nur Modellnamen, Base-URL und den Claude-Startbefehl. Der OpenRouter-Key kommt ausschließlich aus der Umgebung (siehe 3.4). Beispiel:
```yaml
defaults:
claude_cmd: "claude"
openrouter_base_url: "https://openrouter.ai/api"
profiles:
pro:
mode: "pro"
glm:
mode: "openrouter"
model: "z-ai/glm-5.2"
kimi:
mode: "openrouter"
model: "moonshotai/kimi-k2.7-code"
free:
mode: "openrouter"
model: "openrouter/free"
```
> **Modell-Slugs:** Die obigen Slugs (`z-ai/glm-5.2`, `moonshotai/kimi-k2.7-code`, `openrouter/free`) sind gegen die OpenRouter-API getestet (Stand Juni 2026) und entsprechen der mitgelieferten `profiles.example.yml`. OpenRouter ändert gelegentlich Bezeichner bei eigenen Ergänzungen gegen https://openrouter.ai/models prüfen.
>
> ⚠️ **`openrouter/free` ist ein Meta-Slug**, kein festes Modell: OpenRouter routet den Aufruf an ein gerade verfügbares Gratis-Modell weiter. Aktuell landet das z. B. bei `nvidia/nemotron-3.5-content-safety` einem **Content-Safety-Klassifikator, nicht einem Coding-Modell**. Zum Coden stattdessen `qwen/qwen3-coder:free` eintragen (gültig, aber rate-limitiert bei 429 kurz warten oder eigenes Guthaben nutzen).
### 3.3 Skripte ausführbar machen und installieren
```bash
chmod +x bin/claude-profile bin/install-claude-profiles lib/profiles.sh
./bin/install-claude-profiles
```
Der Installer legt (falls nötig) einen Symlink unter `~/src/claude-launcher-profiles` an und fügt eine `source`-Zeile in deine `~/.bashrc` ein, die die Aliase lädt.
### 3.4 OpenRouter-Key setzen
Der Key wird **nicht** in `profiles.yml` gespeichert, sondern als Umgebungsvariable.
Temporär (nur aktuelle Session):
```bash
export OPENROUTER_API_KEY="sk-or-v1-..."
```
Dauerhaft in `~/.bashrc`:
```bash
echo 'export OPENROUTER_API_KEY="sk-or-v1-..."' >> ~/.bashrc
source ~/.bashrc
```
### 3.5 Shell neu laden
```bash
source ~/.bashrc
alias | grep claude-
```
Du sollte `claude-pro`, `claude-glm`, `claude-kimi`, `claude-free` sehen.
---
## 4. Nutzung
```bash
claude-pro # Claude Pro (Anthropic-Login, keine API-Kosten)
claude-glm # GLM-5.2 via OpenRouter
claude-kimi # Kimi K2 via OpenRouter
claude-free # kostenloses Modell via OpenRouter
```
Generisch (z. B. für selbst angelegte Profile):
```bash
claude-profile glm
claude-profile mein-eigenes-profil
```
Jeder Aufruf setzt die nötigen `ANTHROPIC_*`-Variablen für die jeweilige Sitzung und startet `claude`. Vorher gesetzte Claude-Umgebungsvariablen werden pro Aufruf bereinigt, damit Profile sich nicht vermischen.
---
## 5. Eigene Profile anlegen
Trage ein neues Profil in `config/profiles.yml` ein:
```yaml
deepseek:
mode: "openrouter"
model: "deepseek/deepseek-chat-v3.1"
```
Dazu passend einen Alias in `shell/aliases.sh`:
```bash
alias claude-deep="$HOME/src/claude-launcher-profiles/bin/claude-profile deepseek"
```
Danach `source ~/.bashrc` fertig. Der Key (`OPENROUTER_API_KEY`) gilt für alle OpenRouter-Profile gemeinsam.
---
## 6. Kosten vs. Qualität ehrlicher Vergleich
### 6.1 Beispielsitzung (500 K Input + 50 K Output, ungespeichert)
| Modell | Kosten | relativ zu Sonnet 4.5 |
|---|---|---|
| Claude Opus 4.5 | 0,5·$5 + 0,05·$25 = **$3,75** | 1,7× |
| Claude Sonnet 4.5 | 0,5·$3 + 0,05·$15 = **$2,25** | 1× (Referenz) |
| GLM-5.2 | 0,5·$0,95 + 0,05·$3 = **$0,63** | ≈ 0,28× |
| Kimi K2.7-code | 0,5·$0,74 + 0,05·$3,50 = **$0,55** | ≈ 0,24× |
| DeepSeek V3.1 | 0,5·$0,21 + 0,05·$0,79 = **$0,15** | ≈ 0,07× |
| Qwen3 Coder (free) | **$0,00** | gratis |
> Wer Claude Code intensiv nutzt, gibt an einem Tag schnell mehrere Millionen Token aus. Bei 10 M Output/Tag macht der Unterschied zwischen Sonnet ($150) und GLM-5.2 ($30) schnell **über $120 pro Tag** aus. Prompt-Caching (Cache-Read bei GLM ~$0,18/M) senkt die Kosten für wiederholte System-Prompts zusätzlich.
### 6.2 Qualität realistische Einordnung
- **GLM-5.2** (`z-ai/glm-5.2`): großes Reasoning-Modell, 1-M-Kontext, stark in langen Coding-/Agenten-Workflows und Werkzeugnutzung. Für die meisten Software-Engineering-Aufgaben ein brauchbarer Sonnet-Ersatz; bei den allerschwersten Schlussfolgerungen liegt Opus weiter vorn.
- **Kimi K2.7-code** (`moonshotai/kimi-k2.7-code`): fokussiert auf langfristiges Coding und UI-Generierung, Multi-Agenten-Orchestrierung. Gut für komplexere End-to-End-Coding-Tasks; 262K-Kontext (schmaler als GLM). Reasoning-Modell braucht genug Output-Token, sonst verbraucht das „Denken" das Limit bevor die Antwort kommt.
- **DeepSeek V3.1** (`deepseek/deepseek-chat-v3.1`): extrem günstig, hybrides Reasoning, solide Tool-Nutzung Top-Wirtschaftlichkeit für Alltags-Coding.
- **Qwen3 Coder** (`qwen/qwen3-coder` / `:free`): MoE-Code-Modell, 1-M-Kontext, auf agentenhaftes Coding (Function Calling, Repo-Weit-Kontext) optimiert. Die `:free`-Variante ist rate-limitiert, aber ideal zum Ausprobieren.
- **Kostenlos-Modelle** allgemein: gut zum Testen und für einfache Aufgaben; Rate-Limits und gelegentliche Auslastung machen sie für produktiven Dauereinsatz weniger verlässlich. Achtung bei `openrouter/free`: das ist ein Meta-Slug, der an ein gerade verfügbares Gratis-Modell routet das kann auch ein Nicht-Coding-Modell wie ein Content-Safety-Klassifikator sein (siehe Hinweis in 3.2).
**Faustregel:** Für tägliche Coding-Arbeit sind GLM-5.2 oder DeepSeek V3.1 das beste Preis-Leistungs-Verhältnis; für die härtesten Reasoning-Aufgaben oder maximale Zuverlässigkeit bleibt Claude (Pro oder API) die Referenz. Das Schöne: Du kannst **pro Aufruf wechseln** `claude-glm` zum Bauen, `claude-pro` für die kritische Stelle.
---
## 7. Sicherheit
- `config/profiles.yml` enthält nur lokale Einstellungen und steht in `.gitignore` sie wird nicht committet.
- Der OpenRouter-Key liegt **nur** in der Shell-Umgebung (`~/.bashrc`), nie im Repo.
- Vor jedem Profilwechsel werden `ANTHROPIC_*`-Variablen bereinigt, damit kein altes Token in eine andere Sitzung durchsickert.
- Prüfe vor jedem Commit auf versehentliche Secrets:
```bash
grep -R "sk-or-v1-" .
```
Hier darf es keinen Treffer geben.
---
## 8. Troubleshooting
| Symptom | Ursache / Lösung |
|---|---|
| `Error: yq is required` | `yq` fehlt → siehe Abschnitt 2. |
| `Error: missing config file` | `config/profiles.yml` fehlt → `cp config/profiles.example.yml config/profiles.yml`. |
| `Error: OPENROUTER_API_KEY is not set` | Key nicht exportiert → `export OPENROUTER_API_KEY=...` und `source ~/.bashrc`. |
| `Error: profile 'x' not found` | Tippfehler oder Profil fehlt in `profiles.yml`. |
| `Error: unsupported mode` | `mode` muss `pro` oder `openrouter` sein. |
| Model-Antworten fehlerhaft / 404 | Slug veraltet → auf https://openrouter.ai/models prüfen und in `profiles.yml` anpassen. |
| Antwort leer / „finish_reason: length" | Reasoning-Modell hat das Token-Limit im „Denkschritt" verbraucht → höheres `max_tokens`-Setting im Client bzw. längere Antworten erlauben. |
| `claude-free` liefert unbrauchbare Antworten | `openrouter/free` ist ein Meta-Slug und kann an ein Nicht-Coding-Modell routen → stattdessen `qwen/qwen3-coder:free` eintragen. |
| 429 / „rate-limited upstream" | Gratis-Modell ist ausgelastet → kurz warten, ein kostenpflichtiges Slug nutzen oder Guthaben aufladen. |
| Aliase fehlen nach `source ~/.bashrc` | Installer-Zeile fehlt → `./bin/install-claude-profiles` erneut ausführen. |
| `claude-pro` startet nicht richtig | Pro-Login abgelaufen → `claude` einmal direkt starten und anmelden. |
---
## 9. Wo was liegt
```
bin/claude-profile # Einstieg: ruft launch_profile <name> auf
bin/install-claude-profiles # richtet Symlink + .bashrc-Alias-Zeile ein
lib/profiles.sh # Kernlogik: YAML-Parser, Profile, Env-Setup
shell/aliases.sh # die claude-* Aliase
config/profiles.example.yml # Vorlage (im Repo)
config/profiles.yml # deine lokale Konfig (gitignored)
```
Fragen oder Erweiterungen → Forgejo: https://kitux.de/forgejo/dschlueter/claude-launcher-profiles