Berechtigungen
Steuern Sie, welche Aktionen eine Genehmigung zur Ausführung erfordern.
OpenCode verwendet die permission-Konfiguration, um zu entscheiden, ob eine bestimmte Aktion automatisch ausgeführt, Sie zur Bestätigung aufgefordert oder blockiert werden soll.
Ab v1.1.1 ist die veraltete boolesche tools-Konfiguration veraltet und wurde in permission zusammengeführt. Die alte tools-Konfiguration wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt.
Aktionen
Jede Berechtigungsregel wird zu einer der folgenden aufgelöst:
"allow"— ohne Genehmigung ausführen"ask"— zur Genehmigung auffordern"deny"— die Aktion blockieren
Konfiguration
Sie können Berechtigungen global setzen (mit *) und bestimmte Werkzeuge überschreiben.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}Sie können auch alle Berechtigungen auf einmal setzen:
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}Granulare Regeln (Objekt-Syntax)
Für die meisten Berechtigungen können Sie ein Objekt verwenden, um verschiedene Aktionen basierend auf der Werkzeugeingabe 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 durch Musterabgleich ausgewertet, wobei die letzte übereinstimmende Regel gewinnt. Ein gängiges Muster ist, die Catch-All-Regel "*" zuerst zu setzen und spezifischere Regeln danach.
Wildcards
Berechtigungsmuster verwenden einfachen Wildcard-Abgleich:
*entspricht null oder mehr beliebigen Zeichen?entspricht genau einem Zeichen- Alle anderen Zeichen werden wörtlich abgeglichen
Home-Verzeichnis-Erweiterung
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 Werkzeugaufrufe zu erlauben, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem OpenCode gestartet wurde. Dies gilt für jedes Werkzeug, das einen Pfad als Eingabe nimmt (zum Beispiel read, edit, list, glob, grep und viele bash-Befehle).
Die Home-Erweiterung (wie ~/...) beeinflusst nur, wie ein Muster geschrieben wird. Sie macht einen externen Pfad nicht zum Teil des aktuellen Arbeitsbereichs, daher müssen Pfade außerhalb des Arbeitsverzeichnisses weiterhin über external_directory erlaubt werden.
Zum Beispiel erlaubt dies den Zugriff auf alles unter ~/projects/personal/:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}Jedes hier erlaubte Verzeichnis erbt dieselben Standardwerte wie der aktuelle Arbeitsbereich. Da read standardmäßig allow ist, sind Lesevorgänge für Einträge unter external_directory ebenfalls erlaubt, sofern nicht überschrieben. Fügen Sie explizite Regeln hinzu, wenn ein Werkzeug in diesen Pfaden eingeschränkt werden soll, z.B. Bearbeitungen blockieren, aber Lesevorgänge beibehalten:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}Halten Sie die Liste auf vertrauenswürdige Pfade fokussiert und fügen Sie bei Bedarf zusätzliche Erlauben- oder Verweigern-Regeln für andere Werkzeuge (z.B. bash) hinzu.
Verfügbare Berechtigungen
OpenCode-Berechtigungen sind nach Werkzeugnamen geordnet, plus einige Sicherheitsvorkehrungen:
read— Lesen einer Datei (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— Auflisten von Dateien in einem Verzeichnis (entspricht dem Verzeichnispfad)bash— Ausführen von Shell-Befehlen (entspricht geparsten Befehlen wiegit status --porcelain)task— Starten von Subagenten (entspricht dem Subagenten-Typ)skill— Laden eines Skills (entspricht dem Skill-Namen)lsp— Ausführen von LSP-Abfragen (derzeit nicht granular)todoread,todowrite— Lesen/Aktualisieren der Todo-Listewebfetch— Abrufen einer URL (entspricht der URL)websearch,codesearch— Web-/Code-Suche (entspricht der Abfrage)external_directory— wird ausgelöst, wenn ein Werkzeug Pfade außerhalb des Projektarbeitsverzeichnisses berührtdoom_loop— wird ausgelöst, wenn derselbe Werkzeugaufruf 3 Mal mit identischer Eingabe wiederholt wird
Standardwerte
Wenn Sie nichts angeben, startet OpenCode mit permissiven Standardwerten:
- Die meisten Berechtigungen sind standardmäßig
"allow". doom_loopundexternal_directorysind standardmäßig"ask".readist"allow", aber.env-Dateien werden standardmäßig verweigert:
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}Was "Ask" bewirkt
Wenn OpenCode zur Genehmigung auffordert, bietet die Benutzeroberfläche drei Ergebnisse:
once— nur diese Anfrage genehmigenalways— zukünftige Anfragen genehmigen, die den vorgeschlagenen Mustern entsprechen (für den Rest der aktuellen OpenCode-Sitzung)reject— die Anfrage ablehnen
Die Muster, die always genehmigen würde, werden vom Werkzeug bereitgestellt (z.B. setzen Bash-Genehmigungen typischerweise ein sicheres Befehlspräfix wie git status* auf die Whitelist).
Agenten
Sie können Berechtigungen pro Agent überschreiben. Agenten-Berechtigungen werden mit der globalen Konfiguration zusammengeführt, und Agenten-Regeln haben Vorrang. Erfahren Sie mehr über Agenten-Berechtigungen.
Hinweis: Weitere detaillierte Beispiele für Musterabgleich finden Sie im Abschnitt Granulare Regeln (Objekt-Syntax) oben.
{
"$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 Agenten-Berechtigungen auch in Markdown konfigurieren:
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.Tipp: Verwenden Sie Musterabgleich für Befehle mit Argumenten.
"grep *"erlaubtgrep pattern file.txt, während"grep"allein es blockieren würde. Befehle wiegit statusfunktionieren für das Standardverhalten, erfordern aber explizite Berechtigung (wie"git status *"), wenn Argumente übergeben werden.