Zum Inhalt

OpenCode Approval Root Cause

Stand: 2026-05-30

Kurzfazit

Das Muster "Benutzer erlaubt, OpenCode meldet abgelehnt" entsteht sehr wahrscheinlich durch eine Vermischung von OpenCode-Client-Erlaubnis und serverseitiger Governance-Entscheidung. Der lokale OpenCode-Prompt erlaubt nur den Toolaufruf. Controlled Execution kann den Request danach trotzdem korrekt ablehnen, wenn Approval-ID, RBAC, Scope, Lock oder Policy nicht passen.

Current

Ebene Verhalten
OpenCode Client fragt lokal, ob ein Tool/Request ausgefuehrt werden darf
Remote MCP / Tools API prueft Bearer Token, RBAC, Tool Policy und Request-Schema
Controlled Execution prueft Approval-ID, Single-Use, Backup, Scope, Action Type, Lock
Operator Response liefert blocked, rejected, rbac_denied, policy_rejected oder chain_rejected

Root Cause

Ursache Status Beleg
Client-Allow ist keine serverseitige Approval confirmed OpenCode permission und Controlled Execution sind getrennte Schichten
Live Writes default disabled / scoped confirmed approval-flow.yaml und tool-risk-policy.yaml setzen allow_live_writes=false
alte/verbrauchte Approval-ID wird abgelehnt confirmed Code meldet approval_id was already consumed...
fehlende oder falsche Rolle blockiert confirmed Tools API gibt rbac_denied/403 aus
Lock-/Policy-Konflikt blockiert confirmed Dependency Locks und Policy Engine fail-closed
OpenCode stellt "abgelehnt" zu generisch dar likely Error UX verdichtet verschiedene rejected-Gruende
  1. OpenCode-Operator-Response bei Rejects immer mit error_type, blocked_reason, safest_next_action und approval_possible anzeigen.
  2. Client-Dialogtext in Doku/UX klar trennen: "Toolaufruf erlauben" ist nicht "Change freigeben".
  3. Fuer Approval Preview ein explizites read-only Tool nutzen, nicht Execute.
  4. Replays mit alter Approval-ID prominenter als replay_blocked darstellen.
  5. Bei rbac_denied Rolle/Token-Fingerprint anzeigen, aber keine Tokenwerte.

Operator Message

OpenCode durfte den Toolaufruf starten. Die Plattform hat die Ausfuehrung serverseitig blockiert, weil Governance-Bedingungen nicht erfuellt sind. Es wurde keine Infrastruktur geaendert.