Status (2026-06-26): §63 ist geparked (echte App-seitige Resolution erfordert User-seitige Aktion außerhalb dieses Repos). §65 (diese Diagnose + Doku) ist active — siehe Backlog
docs/BACKLOG/open.md§65.
Auf einer Maschine mit beidem:
~/.opencode/bin/opencode(oder eine andere User-Installation der OpenCode CLI), und- einer App, die eine eigene
opencode-Binary mitbringt (z.B. MiniMax Code.app, Claude Desktop, …)
…kann die OpenCode-Solver-Pipeline den Solver-Worker nicht
starten, weil der laufende opencode serve (vom App-Launchd
respawnt) eine andere Version benutzt als die CLI, die der
Solver gerade aufrufen würde. Konkretes Symptom:
❌ OpenCode Versions-/Executable-Konflikt erkannt.
CLI: version=1.15.13, exe=/Users/<user>/.opencode/bin/opencode
Serve: pid=<pid>, version=1.14.28, exe=/Applications/MiniMax Code.app/.../opencode
❌ OpenCode Worker-Start blockiert
Auf Guidos Mac am 2026-06-26 war genau das der Stand.
opencode serve läuft als Hintergrund-Service. macOS-Apps mit
einem Helper-Process nutzen typischerweise einen LaunchAgent
(~/Library/LaunchAgents/...) oder ein app-internal launchd
bundle (/Applications/<App>.app/Contents/.../LaunchAgents/),
der den Serve neu startet, sobald er fehlt. Wenn der App-launchd
Pfad eine ältere opencode-Binary mitbringt als die CLI, die
du selbst installiert hast, dann gewinnt nach jedem kill die
App-Variante.
Der Solver-Diagnose zeigt dir welche App den Serve respawnt und welche Binary sie nutzt:
python scripts/opencode_state_diagnostic.pyOutput (Beispiel, echter Lauf vom 2026-06-26):
Binaries found: 2
[PATH] /Users/Guido/.opencode/bin/opencode
version: 1.15.13
[app-bundle:MiniMax Code] /Applications/MiniMax Code.app/.../opencode
version: 1.14.28
Running opencode-serve: <none>
$OPENCODE_BIN: /Applications/MiniMax Code.app/.../opencode
Verdict: OK (kein Serve-Prozess gerade; Konflikt ist latent)
In Reihenfolge der User-Kontrolle (von "App-Upstream reparieren" bis "Projekt-seitig unabhängig machen"):
Der App-Hersteller (z.B. MiniMax) bringt eine neue Version heraus, die die aktuelle OpenCode-Binary bündelt. Update über den üblichen App-Mechanismus (Mac App Store, Sparkle, manueller Download).
Vorteil: kein Repo-/Code-Touch nötig. App + CLI werden automatisch synchron gehalten.
Nachteil: liegt außerhalb unserer Kontrolle. Bis das App-
Update ausgerollt ist, sind OpenCode Free-Models (z.B.
opencode/big-pickle, opencode/deepseek-v4-flash-free) auf
dieser Maschine nicht testbar.
Wenn der App-Hersteller kein Update liefert, kann der Operator
das app-bundled opencode lokal umbenennen (z.B.
opencode.disabled), sodass der App-launchd die Binary nicht
mehr findet und der User-CLI gewinnt. Alternativ das App-Bundle
komplett aus /Applications/ entfernen, wenn es nicht aktiv
gebraucht wird.
Vorteil: ohne App-Hersteller-Update lösbar.
Nachteil: kann die App-Funktionalität beeinträchtigen (wenn die App selbst auf ihre gebündelte opencode-Binary angewiesen ist). Vorher Doku der App prüfen.
Im Projekt selbst: der OpenCode-Adapter in
scripts/solve_issues.py ruft immer Path(os.environ["OPENCODE_BIN"]) auf,
statt auf PATH zu vertrauen. Damit ist die Solver-Pipeline
immun gegen jede App-launchd-Respawn.
Vorteil: unabhängig vom App-Verhalten, deterministisch reproduzierbar.
Nachteil: erfordert Code-Änderung im Projekt (bisher nicht gemacht — wäre eine zukünftige §63-Folge, falls Option C gewählt wird).
Der Solver hat ein Override-Flag --allow-opencode-state-conflict
für Diagnose-Zwecke. Es umgeht den Versions-Check und startet
den Worker trotzdem — aber:
- Es repariert nicht den Versions-Konflikt; die Worker- Session läuft mit der App-bundled Binary, nicht mit der CLI.
- Niemals als Produktionspfad benutzen. Diagnose only.
- Ergebnisse aus
--allow-opencode-state-conflict-Runs sind möglicherweise nicht repräsentativ für die User-Installation.
Aufgrund des Smoke-Benchmarks vom 2026-06-26
(reports/benchmarks/smoke-free-models-2026-06-26.json):
- Strategische Issues mit
--model openrouter_direct --model-name openai/gpt-4olösen. Funktioniert reproduzierbar, ist unabhängig vom App-State. - OpenCode Free-Models sind experimentell / supervised und erst sinnvoll testbar, wenn Option A oder Option B umgesetzt ist. Bis dahin: gpt-4o.
- Diagnose mit
python scripts/opencode_state_diagnostic.pygehört in jeden Pre-Merge-Check eines OpenCode-relevanten PRs.
- Backlog
docs/BACKLOG/open.md§63 (geparkt) und §65 (active). - README "Free-Models" Abschnitt (experimental / supervised Status).