AI Coding Agents im Vergleich: Claude Code, OpenCode und Pi Coding Agent

Ein praxisnaher Vergleich der drei populärsten AI Coding Agents für Entwickler – mit Bewertungsmatrix, persönlichen Erfahrungen und Empfehlungen für unterschiedliche Use Cases.

Martin Stagl 5 Min. Lesezeit
AI LLM

AI Coding Agents im Vergleich: Claude Code, OpenCode und Pi Coding Agent

Der Markt für KI-gestützte Coding Tools explodiert. Gefühlt gibt es jede Woche ein neues Tool, das verspricht, die Art und Weise, wie wir Code schreiben, zu revolutionieren. In diesem Artikel vergleiche ich drei Tools, die ich selbst ausgiebig getestet habe: Claude Code, OpenCode und den Pi Coding Agent.

Kurz zu meinem Setup: Ich nutze alle Tools hauptsächlich über LiteLLM als Proxy, was mir eine einheitliche API für alle Provider gibt – von lokalen Ollama-Modellen bis zu Claude API.


Die Tools kurz vorgestellt

Claude Code

Claude Code Terminal Screenshot

Claude Code ist Anthropics offizieller CLI-Agent. Er ist eng mit dem Claude-Ökosystem verzahnt und bietet direkten Zugriff auf alle Anthropic-Modelle. Das Tool ist in TypeScript/Node.js gebaut und npm-installierbar.

npm install -g @anthropic-ai/claude-code
claude

OpenCode

OpenCode Terminal Screenshot

OpenCode ist ein relativ neues, auf Performance und saubere UX ausgerichtetes Terminal-Tool, entwickelt von den Machern des SST-Frameworks. Es setzt auf Flexibilität bei der Modellwahl und unterstützt OpenAI-kompatible APIs.

npm install -g opencode-ai
opencode

Pi Coding Agent

Pi Coding Agent Terminal Screenshot

Pi ist ein Projekt aus Österreich – von Mario Zechner (bekannt für libGDX). Es positioniert sich als leichtgewichtiger, konfigurierbarer Agent mit Fokus auf Developer Experience und lokale Nutzung. Besonders interessant für DSGVO-bewusste Entwickler in Europa.

npm install -g @mariozechner/pi-coding-agent
pi

Bewertungsmatrix

Ich habe alle drei Tools nach folgenden Kriterien auf einer Skala von 1–10 bewertet:

KriteriumClaude CodeOpenCodePi
Terminal UX / TUI899
Modell-Flexibilität589
Codebase-Verständnis978
Multi-File Editing1088
Session Management759
Konfigurierbarkeit6710
Kosten-Kontrolle589
Open Source01010
Community & Docs876
DSGVO / Datenschutz5810
Performance899
Erweiterbarkeit6610

Hinweis: Die Bewertung ist subjektiv und spiegelt meinen Workflow als DevOps Engineer wider. Wer ausschließlich mit Anthropic-Modellen arbeitet und Claude Code-spezifische Features nutzt, wird Claude Code höher bewerten.


Pi und OpenCode mit LiteLLM konfigurieren

LiteLLM läuft als lokaler Proxy und exponiert einen OpenAI-kompatiblen Endpunkt – das ist der Schlüssel. Beide Tools können damit so konfiguriert werden, dass sie über diesen Proxy mit beliebigen Modellen kommunizieren: lokale Ollama-Modelle, Claude, GPT-4, oder was auch immer ihr in LiteLLM definiert habt.

LiteLLM vorbereiten

Zunächst brauchen wir eine funktionierende LiteLLM-Instanz. Der Proxy startet standardmäßig auf Port 4000:

# Starten mit minimaler Config
litellm --model ollama/llama3.1:8b

# Oder mit Konfigurationsdatei
litellm --config litellm-config.yaml
# litellm-config.yaml
model_list:
  # Lokale Modelle via Ollama
  - model_name: llama3.1
    litellm_params:
      model: ollama/llama3.1:8b
      api_base: http://localhost:11434

  - model_name: mistral
    litellm_params:
      model: ollama/mistral:7b
      api_base: http://localhost:11434

  # Cloud-Modelle (optional)
  - model_name: claude-sonnet
    litellm_params:
      model: claude-sonnet-4-20250514
      api_key: os.environ/ANTHROPIC_API_KEY

  - model_name: gpt-4o
    litellm_params:
      model: gpt-4o
      api_key: os.environ/OPENAI_API_KEY

general_settings:
  master_key: sk-my-litellm-key   # Beliebiger String als Auth-Key

LiteLLM ist jetzt unter http://localhost:4000 erreichbar und spricht perfektes OpenAI-API-Format. Verifizieren:

curl http://localhost:4000/v1/models \
  -H "Authorization: Bearer sk-my-litellm-key"

Pi mit LiteLLM konfigurieren

Pi nutzt ~/.pi/agent/models.json für Custom-Provider. Da LiteLLM OpenAI-kompatibel ist, konfigurieren wir es als openai-completions Provider:

mkdir -p ~/.pi/agent
// ~/.pi/agent/models.json
{
  "providers": {
    "litellm": {
      "baseUrl": "http://localhost:4000/v1",
      "api": "openai-completions",
      "apiKey": "sk-my-litellm-key",
      "models": [
        {
          "id": "llama3.1",
          "name": "Llama 3.1 8B (lokal via Ollama)",
          "reasoning": false,
          "input": ["text"],
          "contextWindow": 128000,
          "maxTokens": 32000,
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
        },
        {
          "id": "mistral",
          "name": "Mistral 7B (lokal via Ollama)",
          "reasoning": false,
          "input": ["text"],
          "contextWindow": 32000,
          "maxTokens": 8000,
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
        },
        {
          "id": "claude-sonnet",
          "name": "Claude Sonnet (via LiteLLM)",
          "reasoning": false,
          "input": ["text", "image"],
          "contextWindow": 200000,
          "maxTokens": 16384,
          "cost": { "input": 3.0, "output": 15.0, "cacheRead": 0.3, "cacheWrite": 3.75 }
        }
      ]
    }
  }
}

Jetzt den Standard-Provider und das Default-Modell in den Settings setzen:

// ~/.pi/agent/settings.json
{
  "defaultProvider": "litellm",
  "defaultModel": "llama3.1",
  "theme": "dark",
  "compaction": {
    "enabled": true,
    "reserveTokens": 16384,
    "keepRecentTokens": 20000
  }
}

Pi starten und Modell wechseln geht dann einfach mit /model im TUI. Alle konfigurierten LiteLLM-Modelle sind sofort verfügbar.

Tipp: API-Key sicher aus Environment lesen

Statt den Key direkt in die JSON zu schreiben, kann Pi Environment-Variablen auflösen:

{
  "providers": {
    "litellm": {
      "baseUrl": "http://localhost:4000/v1",
      "api": "openai-completions",
      "apiKey": "LITELLM_MASTER_KEY"
    }
  }
}
# In .bashrc / .zshrc
export LITELLM_MASTER_KEY="sk-my-litellm-key"

Oder noch sicherer via Shell-Command (z.B. aus einem Password Manager):

{
  "apiKey": "!op read 'op://Private/LiteLLM/password'"
}

Tipp: Verschiedene Endpunkte pro Umgebung

Da Pi auch .pi/settings.json im Projektverzeichnis unterstützt, könnt ihr pro Projekt unterschiedliche Endpunkte setzen:

// .pi/settings.json (Projektverzeichnis)
{
  "defaultProvider": "litellm",
  "defaultModel": "claude-sonnet"
}
// ~/.pi/agent/models.json – Remote-Instanz für Production-Projekte
{
  "providers": {
    "litellm": {
      "baseUrl": "https://llm.mycompany.internal/v1",
      "api": "openai-completions",
      "apiKey": "LITELLM_PROD_KEY",
      "models": [...]
    }
  }
}

OpenCode mit LiteLLM konfigurieren

OpenCode verwendet ~/.config/opencode/opencode.json (global) oder opencode.json im Projektroot. Die Provider-Konfiguration nutzt das provider-Feld:

mkdir -p ~/.config/opencode
// ~/.config/opencode/opencode.json
{
  "$schema": "https://opencode.ai/config.json",

  // LiteLLM als Custom Provider registrieren
  "provider": {
    "litellm": {
      "name": "LiteLLM (local proxy)",
      "baseURL": "http://localhost:4000/v1",
      "apiKey": "sk-my-litellm-key",
      "models": {
        "llama3.1": {
          "name": "Llama 3.1 8B (lokal)",
          "contextLength": 128000,
          "cost": {
            "input": 0,
            "output": 0
          }
        },
        "mistral": {
          "name": "Mistral 7B (lokal)",
          "contextLength": 32000,
          "cost": {
            "input": 0,
            "output": 0
          }
        },
        "claude-sonnet": {
          "name": "Claude Sonnet (via LiteLLM)",
          "contextLength": 200000,
          "cost": {
            "input": 3.0,
            "output": 15.0
          }
        }
      }
    }
  },

  // Standardmodell setzen
  "model": "litellm/llama3.1"
}

OpenCode starten:

opencode

Das aktive Modell ist sofort der lokale Llama über LiteLLM. Mit /model im TUI könnt ihr zwischen allen konfigurierten Modellen wechseln.

Tipp: API-Key aus Environment

OpenCode liest API-Keys auch aus Environment-Variablen, wenn der Wert dem Muster einer Env-Var entspricht:

export LITELLM_API_KEY="sk-my-litellm-key"
{
  "provider": {
    "litellm": {
      "baseURL": "http://localhost:4000/v1",
      "apiKey": "LITELLM_API_KEY"
    }
  }
}

Tipp: Projekt-spezifische Konfiguration

Legt im Projektroot eine opencode.json an – die überschreibt die globale Config für dieses Projekt:

// opencode.json (im Projektverzeichnis)
{
  "$schema": "https://opencode.ai/config.json",

  // Für dieses Projekt immer Claude Sonnet nutzen
  "model": "litellm/claude-sonnet"
}

Tipp: Kompatibilitäts-Flags für LiteLLM

LiteLLM implementiert die OpenAI API sehr vollständig, aber falls Probleme auftreten (z.B. bei Streaming-Usage-Reports), gibt es Compat-Flags:

{
  "provider": {
    "litellm": {
      "baseURL": "http://localhost:4000/v1",
      "apiKey": "sk-my-litellm-key",
      "models": {
        "llama3.1": {
          "name": "Llama 3.1 8B",
          // Falls LiteLLM keine Usage-Daten im Stream liefert:
          "capabilities": {
            "streaming_usage": false
          }
        }
      }
    }
  }
}

Zusammenfassung: Pi vs. OpenCode Konfigurationsansatz

AspektPiOpenCode
Config-Datei~/.pi/agent/models.json + settings.json~/.config/opencode/opencode.json
FormatJSON (getrennte Dateien)JSONC (alles in einer Datei)
API-Key AuflösungEnv-Var, Shell-Command, LiteralEnv-Var, Literal
Projekt-Override.pi/settings.jsonopencode.json im Root
Modell-Syntaxllama3.1 (Provider implizit durch Settings)litellm/llama3.1
Konfig-ReloadLive beim /model-ÖffnenNeustart nötig

Fazit: Pi’s Ansatz mit getrennten Dateien für Provider-Definitionen und Settings ist etwas sauberer, erfordert aber zwei Dateien. OpenCode hat alles in einer Datei – einfacher für schnelle Setups, aber bei vielen Modellen wird die Config lang.

Fazit

Es gibt keinen klaren “Gewinner” – jedes Tool hat seinen Sweet Spot:

  • Claude Code ist der einfachste Einstieg ins Anthropic-Ökosystem.
  • OpenCode überzeugt durch UX und Performance.
  • Pi ist der flexibelste und datenschutzfreundlichste Agent.

Meine persönliche Gesamtwertung: Pi auf Platz 1, gefolgt von OpenCode und Claude Code.

Habt ihr andere Erfahrungen gemacht? Welches Tool nutzt ihr täglich? Schreibt es mir gerne.


Resources

Share: