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 |
Recommended Fix¶
- OpenCode-Operator-Response bei Rejects immer mit
error_type,blocked_reason,safest_next_actionundapproval_possibleanzeigen. - Client-Dialogtext in Doku/UX klar trennen: "Toolaufruf erlauben" ist nicht "Change freigeben".
- Fuer Approval Preview ein explizites read-only Tool nutzen, nicht Execute.
- Replays mit alter Approval-ID prominenter als
replay_blockeddarstellen. - Bei
rbac_deniedRolle/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.