OpenCode Harness — Referenz-Guide
Stand: März 2026. Aus der täglichen Praxis mit OpenCode; Flags, Preise und Bugs können sich seitdem geändert haben. Siehe auch: OpenCode Tutorial.
Für alle, die Claude Code gut kennen: Dieser Guide erklärt OpenCode im direkten Vergleich.
1. Architektur
OpenCode ist ein autonomer Coding-Agent mit TUI-Frontend und headless-fähigem Backend.
opencode (CLI)
├── TUI — interaktive Terminal-UI (Standard bei `opencode`)
├── opencode run — one-shot Execution (kein TUI)
├── opencode serve — headless HTTP-Server
├── opencode web — Web-UI
└── opencode acp — ACP-Protocol für Editor-Integration
Config-Schichten (von global nach lokal):
| Layer | Pfad | Scope |
|---|---|---|
| Credentials | ~/.local/share/opencode/auth.json |
Provider-Auth |
| Globale Config | ~/.config/opencode/ |
User-weit |
| Projekt-Config | ./opencode.json |
Per-Project (override) |
| Plugins | ./plugins/*.ts |
Per-Project TypeScript Hooks |
| Commands | ./commands/ |
Custom Slash-Commands |
Agent-System: 5 Built-in Agents (build, plan, summary, title, compaction) + Subagents (explore, general). Kein Equivalent zu Claude Codes 21 Markdown-Agenten — OpenCode-Agents sind codebasiert, nicht deklarativ konfigurierbar (außer via opencode agent create).
Storage: SQLite DB unter ~/.local/share/opencode/opencode.db + JSON-Snapshots. Sessions persistieren lokal, aber kein Gedächtnis zwischen opencode run-Aufrufen.
2. Konfiguration
Minimale opencode.json:
{
"$schema": "https://opencode.ai/schema/config.json",
"provider": {
"anthropic": { "apiKey": "${ANTHROPIC_API_KEY}" }
},
"model": {
"default": { "provider": "anthropic", "model": "claude-sonnet-4-5" },
"fast": { "provider": "anthropic", "model": "claude-haiku-4-5-20251001" }
},
"permission": "allow"
}
Permission-Modi ("permission" Key):
| Modus | Verhalten | Empfohlen für |
|---|---|---|
ask |
Fragt bei unbekannten Ops (Default) | Interaktiv/TUI |
auto-edit |
Edits erlaubt, Shell-Ops werden gefragt | Semi-automatisch |
allow |
Alles erlaubt ohne Rückfrage | Headless/CI |
Wichtig: Ohne
"permission": "allow"in headless-Szenarien können Sessions blockieren — OpenCode wartet auf manuelle Bestätigung.
MCP-Server einbinden:
{
"mcp": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "~/Projekte"]
}
}
}
Experimental Plugins (TypeScript Hooks):
{
"experimental": {
"chat": {
"system": { "transform": "plugins/context-injection.ts" }
}
}
}
3. Tuning
Modell wählen
# CLI-Flag (override für einzelnen Lauf)
opencode run "prompt" -m anthropic/claude-opus-4-6
# Reasoning-Varianten (für Modelle mit Extended Thinking)
opencode run --variant high "..." # 16K Reasoning Tokens
opencode run --variant max "..." # 31.9K Reasoning Tokens
opencode run --variant minimal "..." # kein Reasoning
Multi-Provider — der echte Vorteil gegenüber Claude Code
{
"provider": {
"anthropic": { "apiKey": "${ANTHROPIC_API_KEY}" },
"openai": { "apiKey": "${OPENAI_API_KEY}" },
"minimax": { "apiKey": "${MINIMAX_API_KEY}" }
}
}
MiniMax kostet ca. $0.10/1M Tokens — ~150x günstiger als Opus. Sinnvoll für Batch-Tasks ohne Qualitätsanspruch.
Agent auswählen
opencode run --agent explore "..." # Explore-Agent (darf fragen, kein Edit)
opencode run --agent build "..." # Build-Agent (volle Rechte)
opencode agent create # Custom Agent anlegen
opencode agent list # Verfügbare Agents zeigen
Agent-Permissions im Überblick:
| Permission | build | plan | explore | general |
|---|---|---|---|---|
| bash | allow | allow | allow | allow |
| edit | context | context | deny | deny |
| external_dir | ask | ask | ask | ask |
| question | deny | deny | allow | allow |
Context-Injection via Plugin
Kein CLAUDE.md-Equivalent — Kontext muss über TypeScript-Hook injiziert werden:
// plugins/context-injection.ts
export default function transform(system: string): string {
return system + "\n\n# Projekt-Regeln\n- Kein apt ohne Rückfrage\n- Tests vor Commit";
}
Parallele Runs
# Mehrere one-shot Tasks gleichzeitig — OpenCode unterstützt parallele Instanzen
opencode run "Task A" &
opencode run "Task B" &
wait
Debug
opencode debug config # Resolved Config anzeigen (inkl. Env-Var-Expansion)
opencode debug paths # Alle relevanten Dateipfade
opencode debug agent build # Agent-Details: System-Prompt, Permissions
opencode debug lsp # LSP-Status
4. Vor- und Nachteile
Vorteile
| Feature | Bewertung |
|---|---|
| Multi-Provider | Nicht auf Anthropic locked — OpenAI, MiniMax, Custom-Endpoints möglich |
| Kosten | MiniMax ~$0.10/1M Tokens für Batch-Tasks |
| One-shot | opencode run ideal für skriptbare Pipelines |
| Parallele Instanzen | Mehrere Runs gleichzeitig ohne Konflikte |
| Server-Mode | opencode serve für API-basierte Integration |
| Debug-Tools | opencode debug deckt Config, Paths, Agents ab |
| MCP native | CLI-Management von MCP Servern ohne JSON-Editierung |
| Reasoning-Varianten | high/max/minimal direkt als Flag |
Nachteile — ehrliche Einschätzung
| Problem | Konsequenz |
|---|---|
| Fragt NICHT nach | Unvollständiges Briefing → falsches Produkt. OpenCode baut, was es versteht — nicht was du meinst. |
| Schwache Feedback-Annahme | Korrekturen werden bestätigt, nicht wirklich integriert ("Verstanden, soll ich nochmal?") |
| Scope-Drift | Ohne explizites Scope-Statement erweitert OpenCode selbstständig den Auftrag |
| Kein Session-Gedächtnis | opencode run startet jedes Mal blank — kein Kontext aus Vorläufen |
| Plugins experimental | Hooks weniger mächtig als Claude Codes 5-Punkt-Lifecycle (PreToolUse, PostToolUse etc.) |
| Kein deklaratives Regelwerk | Kein CLAUDE.md-Equivalent — Regeln müssen per Hook injiziert werden |
| Keine Subagent-Orchestrierung | Agents sind intern; kein paralleles Agent-Spawning wie in Claude Code möglich |
Fazit: OpenCode ist stark für gut-spezifizierte one-shot Tasks, Multi-Provider-Flexibilität und headless Pipelines. Für komplexe, iterative Arbeit mit Kontext-Aufbau bleibt Claude Code überlegen.
5. Referenz
Dateipfade
| Pfad | Inhalt |
|---|---|
./opencode.json |
Projekt-Config (per-project override) |
~/.config/opencode/ |
Globale Config |
~/.local/share/opencode/ |
Data-Root |
~/.local/share/opencode/auth.json |
Provider-Credentials |
~/.local/share/opencode/opencode.db |
SQLite Session-DB |
./plugins/ |
TypeScript Hooks (per-project) |
./commands/ |
Custom Slash-Commands (per-project) |
Wichtige Befehle
# Starten
opencode # TUI
opencode run "prompt" # One-shot
opencode run "prompt" -m provider/model # Mit Modell-Auswahl
opencode run --variant max "prompt" # Max Reasoning
opencode serve --port 4096 # Headless Server
# Provider & Modelle
opencode providers list # Konfigurierte Provider
opencode providers login anthropic # Auth-Flow
opencode models anthropic # Verfügbare Modelle für Provider
# MCP
opencode mcp list # Konfigurierte MCP Server
opencode mcp add name -- command # MCP Server hinzufügen
opencode mcp remove name # MCP Server entfernen
# Agents
opencode agent list # Verfügbare Agents
opencode agent create # Custom Agent anlegen
# Debug
opencode debug config # Resolved Config
opencode debug paths # Alle Pfade
opencode debug agent <name> # Agent-Details
opencode debug lsp # LSP-Status
opencode debug skill # Skill-Status
Stand: 2026-03 — Getestet gegen OpenCode MCP-Server und Harness-Evals im harness-tutorials Projekt.