Der Open-Source KI-Coding-Agent.
English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt
OpenCode kann für jeden Schritt ein eigenes Modell wählen, statt ein Modell für die ganze Session zu halten: Ein lokales oder günstiges Modell macht die Routinearbeit, das stärkste Modell bleibt den Teilen vorbehalten, die es wirklich brauchen. Routing ist so lange aus, bis du routing.enabled einschaltest.
Wähle im Modellauswahlmenü Auto (Routing), um eine Session automatisch zu routen. Wer ein bestimmtes Modell auswählt, legt die Session darauf fest, und Routing lässt sie in Ruhe.
| Ebene | Standard | Zuständig für |
|---|---|---|
| Local | das Modell aus deiner qwen-Konfiguration |
Implementierung, Tests, Refactorings sowie die Build- und Shell-Schritte, die sie prüfen |
| Routine | günstigstes aktives DeepSeek-Flash-Modell | Planung, Analyse, Review, Erklärungen, gewöhnliches Debugging |
| Pro | stärkstes aktives DeepSeek-Modell | Architektur und große Refactorings, schwieriges Debugging, sicherheitsrelevante Arbeit |
- Deine letzte Anfrage setzt die Grundklassifizierung, danach wird jeder Schritt im Turn anhand dessen neu eingeteilt, was der Turn bereits getan hat: Schritte, die nur lesen und suchen, bleiben auf der Routine-Ebene. Sobald ein Schritt Dateien geändert oder einen Befehl ausgeführt hat, führt der Rest des Turns die Arbeit auf der Local-Ebene fort. Zwei aufeinanderfolgende Schritte mit fehlgeschlagenen Tool-Aufrufen zählen als schwieriges Debugging und gehen an die Pro-Ebene. Mit
routing.step_routing: falsebleibt ein Turn bei einer Ebene. - Eine Ebene wird nur genutzt, wenn ihr Modell aktiviert und gesund ist und die Konversation noch in sein Kontextfenster passt.
- Nach
routing.attemptsFehlschlägen eskaliert die Arbeit auf die nächste Ebene, und das fehlerhafte Modell wird für eine kurze Abklingzeit übersprungen. Ein unterbrochener Lauf zählt nie als Modellfehler. routing.preferencetauscht Kosten gegen Qualität:cost-first,balanced(Standard) oderquality-first. Bei jedem Modellwechsel zeigt die Session eine kurze Notiz mit Modell, Ebene und Grund (routing.diagnostics).
Die App richtet ein komplettes Projekt-Workspace für dich ein: Sie erzeugt die Workspace-Artefakte, prüft sie, öffnet das Projekt und startet die erste Aufgabe in einer Session. Öffne Neues Projekt-Workspace auf der Projektübersicht (das Raster-Symbol in der Kopfzeile) oder über die Befehlspalette. Der Assistent fragt nach Projektbeschreibung und Zielverzeichnis, einer Ausgabesprache, der Modellauswahl (automatisches Drei-Modell-Routing oder ein festgelegtes Modell mit Präferenz cost-first, balanced, quality-first), optional einem lokalen Modell (Base-URL, Modell-ID, Provider-ID, optional API-Key, Timeout, maximale Ausgabe-Tokens) mit Verbindungstest, und ob die frühe kostenbewusste Kompaktierung aktiv sein soll. Danach arbeitet er sichtbare Stufen ab und lässt die fertige Session mit der ersten Aufgabe offen; eine fehlgeschlagene Stufe kann fortgesetzt werden, ein abgebrochener Lauf behält die bereits erzeugten Dateien.
Es wird nichts Geheimes auf die Platte geschrieben: Ein optionaler lokaler API-Key kommt in den Credential-Speicher, und in der erzeugten projektbezogenen opencode.json darf nur sein Umgebungsvariablenname stehen. Diese Datei übernimmt dieselben Routing- und Kompaktierungsentscheidungen für spätere Arbeit in dem Projekt.
Lange Sessions werden zu einem dauerhaften Prüfpunkt zusammengefasst, damit die Konversation weiter in das Fenster des Modells passt. Zwei unabhängige Auslöser nutzen dieselbe Mechanik.
Kompaktierung durch Kontextgrenze ist standardmäßig an (compaction.auto): Sie läuft, wenn die geschätzte Anfrage die Obergrenze des Modells überschreitet, behält die zuletzt genutzten compaction.keep.tokens (Standard 15.000) unverändert und fasst den Rest zusammen.
Frühe kostenbewusste Kompaktierung ist opt-in (compaction.early.enabled) und greift, bevor die Grenze in Sicht kommt: Sie läuft nur, wenn der gesamte Kontext mindestens min_tokens (24.000) ergibt und der entfallbare Teil mindestens min_benefit_tokens (8.000) Tokens bringt, höchstens alle cooldown_seconds (300) pro Session. require_task_boundary lässt sie auf eine natürliche Pause warten; das ist standardmäßig true, aber ein einzelner Tool-Calling-Turn erreicht nie eine solche Pause — false ist deshalb die Einstellung, mit der lange agentische Turns überhaupt kompaktiert werden. local_summarize schickt die Zusammenfassung an das konfigurierte lokale Modell und erfasst deren Nutzung und Kosten.
{
"compaction": {
"auto": true,
"keep": { "tokens": 15000 },
"early": { "enabled": true, "min_tokens": 24000, "min_benefit_tokens": 8000, "cooldown_seconds": 300, "require_task_boundary": false, "local_summarize": false },
},
}Ein Kompaktierungslauf braucht Ausgaberaum für die eigene Zusammenfassung. Ein lokales Modell mit kleinem limit.output kann deshalb mit Compaction summary reached the output token limit fehlschlagen — dann diesen Wert erhöhen oder local_summarize ausschalten.
# YOLO
curl -fsSL https://opencode.ai/v2/install | bash
# Paketmanager
npm i -g @opencode/cli@latest # oder bun/pnpm/yarn
brew install anomalyco/tap/opencode-v2 # macOS und Linux (empfohlen, immer aktuell)
brew install opencode # macOS und Linux (offizielle Brew-Formula, seltener aktualisiert)
sudo pacman -S opencode # Arch Linux (Stable)
paru -S opencode-beta # Arch Linux (Latest from AUR)
mise use -g opencode # jedes Betriebssystem
nix run github:anomalyco/opencode # NixTip
Entferne Versionen älter als 0.1.x vor der Installation.
OpenCode ist auch als Desktop-Anwendung verfügbar. Lade sie von opencode.ai/download herunter.
| Plattform | Download |
|---|---|
| macOS (Apple Silicon) | opencode-desktop-mac-arm64.dmg |
| macOS (Intel) | opencode-desktop-mac-x64.dmg |
| Windows | opencode-desktop-win-x64.exe |
| Linux | .deb, .rpm oder AppImage |
# macOS (Homebrew)
brew install --cask opencode-desktopDas Installationsskript beachtet die folgende Prioritätsreihenfolge für den Installationspfad:
$OPENCODE_INSTALL_DIR- Benutzerdefiniertes Installationsverzeichnis$XDG_BIN_DIR- XDG Base Directory Specification-konformer Pfad$HOME/bin- Standard-Binärverzeichnis des Users (falls vorhanden oder erstellbar)$HOME/.opencode/bin- Standard-Fallback
# Beispiele
OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/v2/install | bash
XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/v2/install | bashOpenCode enthält zwei eingebaute Agents, zwischen denen du mit der Tab-Taste wechseln kannst.
- build - Standard-Agent mit vollem Zugriff für Entwicklungsarbeit
- plan - Nur-Lese-Agent für Analyse und Code-Exploration
- Verweigert Datei-Edits standardmäßig
- Fragt vor dem Ausführen von bash-Befehlen nach
- Ideal zum Erkunden unbekannter Codebases oder zum Planen von Änderungen
Außerdem ist ein general-Subagent für komplexe Suchen und mehrstufige Aufgaben enthalten.
Dieser wird intern genutzt und kann in Nachrichten mit @general aufgerufen werden.
Mehr dazu unter Agents.
Mehr Infos zur Konfiguration von OpenCode findest du in unseren Docs.
Wenn du zu OpenCode beitragen möchtest, lies bitte unsere Contributing Docs, bevor du einen Pull Request einreichst.
Wenn du an einem Projekt arbeitest, das mit OpenCode zusammenhängt und "opencode" als Teil seines Namens verwendet (z.B. "opencode-dashboard" oder "opencode-mobile"), füge bitte einen Hinweis in deine README ein, dass es nicht vom OpenCode-Team gebaut wird und nicht in irgendeiner Weise mit uns verbunden ist.

{ "$schema": "https://opencode.ai/config.json", // Jeder OpenAI-kompatible Server: llama.cpp, Ollama, vLLM, LM Studio, ... "providers": { "local": { "package": "aisdk:@ai-sdk/openai-compatible", "settings": { "baseURL": "http://127.0.0.1:8080/v1" }, "models": { "qwen3-coder": { "limit": { "context": 131072, "output": 8192 } } }, }, }, "qwen": { "base_url": "http://127.0.0.1:8080/v1", "model": "qwen3-coder", "provider": "local" }, "routing": { "enabled": true, "preference": "balanced", // Optional. Fehlende Rollen werden aus dem Katalog geholt. "roles": { "local": "local/qwen3-coder", "routine": "deepseek/deepseek-chat", "pro": "deepseek/deepseek-reasoner" }, "step_routing": true, }, }