mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-05 16:36:52 +00:00
238 lines
7.8 KiB
Plaintext
238 lines
7.8 KiB
Plaintext
---
|
||
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`, `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/`:
|
||
|
||
```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`, `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 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)
|
||
- `todoread`, `todowrite` – lesen/aktualisieren der Aufgabenliste
|
||
- `webfetch` – 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ü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.
|
||
:::
|