Berechtigungen
Steuern Sie, für welche Aktionen eine Genehmigung erforderlich ist.
OpenCode verwendet die permission-Konfiguration, um zu entscheiden, ob eine bestimmte Aktion automatisch ausgeführt werden soll, Sie dazu auffordern oder blockiert werden soll.
Ab v1.1.1 ist die alte boolesche Konfiguration tools veraltet und wurde in permission zusammengeführt. Die alte tools-Konfiguration wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt.
Actions
Jede Berechtigungsregel wird zu einem der folgenden aufgelöst:
"allow"– ohne Genehmigung ausführen"ask"— prompt for approval"deny"– Aktion blockieren
Configuration
Sie können Berechtigungen global festlegen (mit *) und bestimmte Tools überschreiben.
{ "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" }}Sie können auch alle Berechtigungen auf einmal festlegen:
{ "$schema": "https://opencode.ai/config.json", "permission": "allow"}Granulare Regeln (Objektsyntax)
Bei den meisten Berechtigungen können Sie ein Objekt verwenden, um basierend auf der Werkzeugeingabe verschiedene Aktionen anzuwenden.
{ "$schema": "https://opencode.ai/config.json", "permission": { "bash": { "*": "ask", "git *": "allow", "npm *": "allow", "rm *": "deny", "grep *": "allow" }, "edit": { "*": "deny", "packages/web/src/content/docs/*.mdx": "allow" } }}Regeln werden nach Musterübereinstimmung ausgewertet, wobei die letzte übereinstimmende Regel gewinnt. Ein gängiges Muster besteht darin, zuerst die Catch-All-Regel "*" und danach spezifischere Regeln zu platzieren.
Wildcards
Berechtigungsmuster verwenden einen einfachen Platzhalterabgleich:
*matches zero or more of any character?matches exactly one character- Alle anderen Zeichen stimmen wörtlich überein
Erweiterung des Home-Verzeichnisses
Sie können ~ oder $HOME am Anfang eines Musters verwenden, um auf Ihr Home-Verzeichnis zu verweisen. Dies ist besonders nützlich für external_directory-Regeln.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
Externe Verzeichnisse
Verwenden Sie external_directory, um Toolaufrufe zuzulassen, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem OpenCode gestartet wurde. Dies gilt für jedes Werkzeug, das einen Pfad als Eingabe verwendet (z. B. read, edit, list, glob, grep und viele bash-Befehle).
Die Home-Erweiterung (wie ~/...) wirkt sich nur darauf aus, wie ein Muster geschrieben wird. Dadurch wird ein externer Pfad nicht zum Teil des aktuellen Arbeitsbereichs, daher müssen Pfade außerhalb des Arbeitsverzeichnisses weiterhin über external_directory zulässig sein.
Dies ermöglicht beispielsweise den Zugriff auf alles unter ~/projects/personal/:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" } }}Jedes hier zulässige Verzeichnis erbt dieselben Standardeinstellungen wie der aktuelle Arbeitsbereich. Seit read defaults to allow sind Lesevorgänge auch für Einträge unter external_directory zulässig, sofern sie nicht überschrieben werden. Fügen Sie explizite Regeln hinzu, wenn ein Tool in diesen Pfaden eingeschränkt werden soll, z. B. das Blockieren von Bearbeitungen, während Lesevorgänge beibehalten werden:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" }, "edit": { "~/projects/personal/**": "deny" } }}Konzentrieren Sie sich in der Liste auf vertrauenswürdige Pfade und fügen Sie bei Bedarf zusätzliche Zulassungs- oder Ablehnungsregeln für andere Tools hinzu (z. B. bash).
Verfügbare Berechtigungen
OpenCode permissions are keyed by tool name, plus a couple of safety guards:
read– eine Datei lesen (entspricht dem Dateipfad)edit– alle Dateiänderungen (umfasstedit,write,patch,multiedit)glob– Datei-Globbing (entspricht dem Glob-Muster)grep– Inhaltssuche (entspricht dem Regex-Muster)list– Auflistung der Dateien in einem Verzeichnis (entspricht dem Verzeichnispfad)bash– Ausführen von Shell-Befehlen (entspricht analysierten Befehlen wiegit status --porcelain)task– Subagenten starten (entspricht dem Subagententyp)skill– Laden einer Fertigkeit (entspricht dem Fertigkeitsnamen)lsp— running LSP queries (currently non-granular)todoread,todowrite– reading/updating die Aufgabenlistewebfetch– Abrufen eines URL (entspricht dem URL)websearch,codesearch– web/code Suche (entspricht der Abfrage)external_directory– wird ausgelöst, wenn ein Tool Pfade außerhalb des Projektarbeitsverzeichnisses berührtdoom_loop– wird ausgelöst, wenn derselbe Werkzeugaufruf dreimal mit identischer Eingabe wiederholt wird
Defaults
Wenn Sie nichts angeben, beginnt OpenCode mit zulässigen Standardeinstellungen:
- Die meisten Berechtigungen sind standardmäßig auf
"allow"eingestellt. doom_loopundexternal_directorysind standardmäßig"ask".readis"allow", but.envfiles are denied by default:
{ "permission": { "read": { "*": "allow", "*.env": "deny", "*.env.*": "deny", "*.env.example": "allow" } }}Was „Fragen“ bewirkt
Wenn OpenCode zur Genehmigung auffordert, bietet UI drei Ergebnisse:
once— approve just this requestalways– zukünftige Anfragen genehmigen, die den vorgeschlagenen Mustern entsprechen (für den Rest der aktuellen OpenCode-Sitzung)reject– die Anfrage ablehnen
Der Satz von Mustern, die always genehmigen würde, wird vom Tool bereitgestellt (Beispiel: Bash-Genehmigungen setzen normalerweise ein sicheres Befehlspräfix wie git status* auf die Whitelist).
Agents
Sie können Berechtigungen pro Agent überschreiben. Agentenberechtigungen werden mit der globalen Konfiguration zusammengeführt und Agentenregeln haben Vorrang. Learn more über Agentenberechtigungen.
{ "$schema": "https://opencode.ai/config.json", "permission": { "bash": { "*": "ask", "git *": "allow", "git commit *": "deny", "git push *": "deny", "grep *": "allow" } }, "agent": { "build": { "permission": { "bash": { "*": "ask", "git *": "allow", "git commit *": "ask", "git push *": "deny", "grep *": "allow" } } } }}Sie können Agentenberechtigungen auch in Markdown konfigurieren:
---description: Code review without editsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Only analyze code and suggest changes.