Buckets:
| --- | |
| title: Berechtigungen | |
| description: 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. | |
| --- | |
| ## Aktionen | |
| Jede Berechtigungsregel wird zu einem der folgenden aufgelöst: | |
| - `"allow"` – ohne Genehmigung ausführen | |
| - `"ask"` — um Genehmigung bitten | |
| - `"deny"` – Aktion blockieren | |
| --- | |
| ## Konfiguration | |
| Sie können Berechtigungen global festlegen (mit `*`) und bestimmte Tools überschreiben. | |
| ```json title="opencode.json" | |
| { | |
| "$schema": "https://opencode.ai/config.json", | |
| "permission": { | |
| "*": "ask", | |
| "bash": "allow", | |
| "edit": "deny" | |
| } | |
| } | |
| ``` | |
| Sie können auch alle Berechtigungen auf einmal festlegen: | |
| ```json title="opencode.json" | |
| { | |
| "$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. | |
| ```json title="opencode.json" | |
| { | |
| "$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. | |
| ### Platzhalter | |
| 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`](#external-directories)-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`, `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/`: | |
| ```json title="opencode.json" | |
| { | |
| "$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`](#defaults) 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: | |
| ```json title="opencode.json" | |
| { | |
| "$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-Berechtigungen basieren auf Tool-Namen sowie einigen Sicherheitsvorkehrungen: | |
| - `read` – eine Datei lesen (entspricht dem Dateipfad) | |
| - `edit` – alle Dateiänderungen (umfasst `edit`, `write`, `patch`) | |
| - `glob` – Datei-Globbing (entspricht dem Glob-Muster) | |
| - `grep` – Inhaltssuche (entspricht dem Regex-Muster) | |
| - `bash` – Ausführen von Shell-Befehlen (entspricht analysierten Befehlen wie `git status --porcelain`) | |
| - `task` – Subagenten starten (entspricht dem Subagententyp) | |
| - `skill` – Laden einer Fertigkeit (entspricht dem Fertigkeitsnamen) | |
| - `lsp` – Ausführen von LSP-Abfragen (derzeit nicht granular) | |
| - `webfetch` – Abrufen eines URL (entspricht dem URL) | |
| - `websearch` – Websuche (entspricht der Abfrage) | |
| - `external_directory` – wird ausgelöst, wenn ein Tool Pfade außerhalb des Projektarbeitsverzeichnisses berührt | |
| - `doom_loop` – wird ausgelöst, wenn derselbe Werkzeugaufruf dreimal mit identischer Eingabe wiederholt wird | |
| --- | |
| ## Standardwerte | |
| Wenn Sie nichts angeben, beginnt OpenCode mit zulässigen Standardeinstellungen: | |
| - Die meisten Berechtigungen sind standardmäßig auf `"allow"` eingestellt. | |
| - `doom_loop` und `external_directory` sind standardmäßig `"ask"`. | |
| - `read` ist `"allow"`, aber `.env`-Dateien werden standardmäßig verweigert: | |
| ```json title="opencode.json" | |
| { | |
| "permission": { | |
| "read": { | |
| "*": "allow", | |
| "*.env": "deny", | |
| "*.env.*": "deny", | |
| "*.env.example": "allow" | |
| } | |
| } | |
| } | |
| ``` | |
| --- | |
| ## Was „Fragen“ bewirkt | |
| Wenn OpenCode zur Genehmigung auffordert, bietet UI drei Ergebnisse: | |
| - `once` – nur diese Anfrage genehmigen | |
| - `always` – 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). | |
| --- | |
| ## Agenten | |
| Sie können Berechtigungen pro Agent überschreiben. Agentenberechtigungen werden mit der globalen Konfiguration zusammengeführt und Agentenregeln haben Vorrang. [Learn more](/docs/agents#permissions) über Agentenberechtigungen. | |
| :::note | |
| Ausführlichere Mustervergleichsbeispiele finden Sie oben im Abschnitt [Granular Rules (Object Syntax)](#granular-rules-object-syntax). | |
| ::: | |
| ```json title="opencode.json" | |
| { | |
| "$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: | |
| ```markdown title="~/.config/opencode/agents/review.md" | |
| --- | |
| description: Code review without edits | |
| mode: subagent | |
| permission: | |
| edit: deny | |
| bash: ask | |
| webfetch: deny | |
| --- | |
| Only analyze code and suggest changes. | |
| ``` | |
| :::tip | |
| Verwenden Sie den Mustervergleich für Befehle mit Argumenten. `"grep *"` erlaubt `grep pattern file.txt`, während `"grep"` allein es blockieren würde. Befehle wie `git status` funktionieren für das Standardverhalten, erfordern jedoch eine explizite Erlaubnis (wie `"git status *"`), wenn Argumente übergeben werden. | |
| ::: | |
Xet Storage Details
- Size:
- 7.75 kB
- Xet hash:
- 5245bde471095d65c99fecc03c37b9846b8e548a0594b33480ca34de63243915
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.