Deutsch
Dokumentation
Berechtigungen

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 werden, Sie zur Bestätigung auffordern oder blockiert werden soll.

Ab v1.1.1 ist die veraltete boolesche tools-Konfiguration nicht mehr empfohlen 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 Werte aufgelöst:

  • "allow" — ohne Genehmigung ausführen
  • "ask" — zur Genehmigung auffordern
  • "deny" — die Aktion blockieren

Konfiguration

Sie können Berechtigungen global (mit *) festlegen und bestimmte Tools überschreiben.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

Sie können auch alle Berechtigungen auf einmal festlegen:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": "allow"
}

Granulare Regeln (Objektsyntax)

Für die meisten Berechtigungen können Sie ein Objekt verwenden, um basierend auf der Tool-Eingabe unterschiedliche Aktionen anzuwenden.

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 per Mustervergleich ausgewertet, wobei die letzte übereinstimmende Regel gewinnt. Ein gängiges Muster besteht darin, die Catch-all-Regel "*" zuerst und spezifischere Regeln danach zu platzieren.

Wildcards

Berechtigungsmuster verwenden einfaches Wildcard-Matching:

  • * entspricht null oder mehr beliebigen Zeichen
  • ? entspricht genau einem Zeichen
  • Alle anderen Zeichen entsprechen wörtlich

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 Tool-Aufrufe zuzulassen, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem OpenCode gestartet wurde. Dies gilt für jedes Tool, das einen Pfad als Eingabe entgegennimmt (zum Beispiel read, edit, glob, grep und viele bash-Befehle).

Die Home-Erweiterung (wie ~/...) wirkt sich nur darauf aus, wie ein Muster geschrieben wird. Sie macht einen externen Pfad nicht zu einem Teil des aktuellen Arbeitsbereichs, sodass Pfade außerhalb des Arbeitsverzeichnisses weiterhin über external_directory zugelassen werden müssen.

Dies erlaubt beispielsweise den Zugriff auf alles unter ~/projects/personal/:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    }
  }
}

Jedes hier zugelassene Verzeichnis erbt dieselben Standardwerte wie der aktuelle Arbeitsbereich. Da read standardmäßig auf allow steht, sind auch Lesevorgänge für Einträge unter external_directory erlaubt, sofern sie nicht überschrieben werden. Fügen Sie explizite Regeln hinzu, wenn ein Tool in diesen Pfaden eingeschränkt werden soll, etwa um Edits zu blockieren und gleichzeitig Lesevorgänge beizubehalten:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    },
    "edit": {
      "~/projects/personal/**": "deny"
    }
  }
}

Beschränken Sie die Liste auf vertrauenswürdige Pfade und ergänzen Sie nach Bedarf zusätzliche Allow- oder Deny-Regeln für andere Tools (zum Beispiel bash).


Verfügbare Berechtigungen

OpenCode-Berechtigungen werden nach Tool-Namen verschlüsselt, plus ein paar 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 geparsten Befehlen wie git status --porcelain)
  • task — Starten von Subagenten (entspricht dem Subagent-Typ)
  • skill — Laden eines Skills (entspricht dem Skill-Namen)
  • lsp — Ausführen von LSP-Abfragen (derzeit nicht granular)
  • question — Fragen an den Benutzer während der Ausführung
  • webfetch — Abrufen einer URL (entspricht der URL)
  • websearch — Websuche (entspricht der Suchanfrage)
  • external_directory — ausgelöst, wenn ein Tool Pfade außerhalb des Projekt-Arbeitsverzeichnisses berührt
  • doom_loop — ausgelöst, wenn sich derselbe Tool-Aufruf dreimal mit identischer Eingabe wiederholt

Standardwerte

Wenn Sie nichts angeben, startet OpenCode mit permissiven Standardwerten:

  • Die meisten Berechtigungen sind standardmäßig auf "allow" gesetzt.
  • doom_loop und external_directory sind standardmäßig auf "ask" gesetzt.
  • read ist "allow", aber .env-Dateien werden standardmäßig verweigert:
opencode.json
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

Was "Ask" bewirkt

Wenn OpenCode zur Genehmigung auffordert, bietet die UI drei Ergebnisse an:

  • 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 verweigern

Die Menge der Muster, die always genehmigen würde, wird vom Tool bereitgestellt (zum Beispiel setzen Bash-Genehmigungen typischerweise 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. Erfahren Sie mehr über Agentenberechtigungen.

Hinweis: Weitere detaillierte Beispiele zum Mustervergleich finden Sie im obigen Abschnitt Granulare Regeln (Objektsyntax).

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:

~/.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.

Tipp: Verwenden Sie 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 aber eine explizite Berechtigung (wie "git status *"), wenn Argumente übergeben werden.