Berechtigungen
Steuern Sie, welche Aktionen eine Genehmigung erfordern, um ausgeführt zu werden.
Dropstone verwendet die permission-Konfiguration, um zu entscheiden, ob eine bestimmte Aktion automatisch ausgeführt, Sie dazu aufgefordert werden oder blockiert werden soll.
Die veraltete tools-Boolesche Konfiguration ist veraltet; sie 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 Optionen 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.
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
Sie können auch alle Berechtigungen auf einmal festlegen:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": "allow"
}
Granulare Regeln (Objektsyntax)
Für die meisten Berechtigungen können Sie ein Objekt verwenden, um verschiedene Aktionen basierend auf der Tool-Eingabe anzuwenden.
{
"$schema": "https://dropstone.io/schema/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 häufiges Muster besteht darin, die Catch-all-Regel "*" zuerst und spezifischere Regeln danach zu setzen.
Platzhalter
Berechtigungsmuster verwenden einfachen Platzhalterabgleich:
*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 Tool-Aufrufe zu erlauben, die Pfade außerhalb des Arbeitsverzeichnisses berühren, in dem Dropstone gestartet wurde. Dies gilt für jedes Tool, das einen Pfad als Eingabe akzeptiert (z. B. read, edit, glob, grep und viele bash-Befehle).
Die Home-Erweiterung (wie ~/...) betrifft nur, wie ein Muster geschrieben wird. Sie macht einen externen Pfad nicht zu einem 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://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
Jedes hier erlaubte Verzeichnis erbt dieselben Standardwerte wie der aktuelle Arbeitsbereich. Da read standardmäßig auf allow gesetzt ist, sind Lesezugriffe auch für Einträge unter external_directory erlaubt, sofern nicht überschrieben. Fügen Sie explizite Regeln hinzu, wenn ein Tool in diesen Pfaden eingeschränkt werden soll, z. B. um Bearbeitungen zu blockieren, während Lesezugriffe erlaubt bleiben:
{
"$schema": "https://dropstone.io/schema/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 Erlaubnis- oder Verweigerungsregeln für andere Tools (z. B. bash) hinzu.
Verfügbare Berechtigungen
Dropstone-Berechtigungen sind nach Tool-Namen sowie einigen Sicherheitsvorkehrungen benannt:
read: Lesen einer Datei (entspricht dem Dateipfad)edit: alle Dateiänderungen (umfasstedit,write,patch)glob: Datei-Globbing (entspricht dem Glob-Muster)grep: Inhaltssuche (entspricht dem Regex-Muster)bash: Ausführen von Shell-Befehlen (entspricht geparsten Befehlen wiegit status --porcelain)task: Starten von Unteragenten (entspricht dem Unteragententyp)skill: Laden einer Fähigkeit (entspricht dem Fähigkeitsnamen)lsp: Ausführen von LSP-Abfragen (derzeit nicht granular)question: Fragen an den Benutzer während der Ausführungwebfetch: Abrufen einer URL (entspricht der URL)websearch: Websuche (entspricht der Abfrage)external_directory: wird ausgelöst, wenn ein Tool Pfade außerhalb des Projekt-Arbeitsverzeichnisses berührtdoom_loop: wird ausgelöst, wenn derselbe Tool-Aufruf dreimal mit identischer Eingabe wiederholt wird
Standardwerte
Wenn Sie nichts angeben, fragt der Standard-build-Agent vor allem nach. Genehmigung ist der Standard, nicht die Ausnahme:
{
"permission": {
"*": "ask",
"read": {
"*": "ask",
"*.env": "ask",
"*.env.*": "ask",
"*.env.example": "ask"
},
"external_directory": { "*": "ask" },
"question": "deny",
"plan_enter": "deny",
"plan_exit": "deny",
"mode_switch": "deny"
}
}
Verzeichnisse, die Sie bereits genehmigt haben, werden für den Rest der Sitzung als "allow" zu external_directory hinzugefügt.
Ihre Konfiguration wird über diesen Standardwerten zusammengeführt, und Ihre Regeln gewinnen. Sie ersetzt sie nicht: Wenn Sie edit auf "allow" setzen, bleibt read auf "ask". Benennen Sie daher jede Berechtigung, die Sie ändern möchten.
Der accept all-Agent startet stattdessen mit "*": "allow", wobei external_directory vollständig erlaubt ist. Lesezugriffe auf .env und .env.* fragen weiterhin nach, mit der Begründung, dass die automatische Genehmigung eines Laufs nicht dasselbe ist wie die Zustimmung zur Herausgabe von Geheimnissen.
Headless- und Servermodus
Interaktiv ist "ask" harmlos: Sie werden aufgefordert und genehmigen. Unter dropstone serve, in CI oder überall sonst ohne Person an der Tastatur gibt es niemanden, den man fragen könnte, sodass der Aufruf bei "status": "running" bleibt und die Anfrage hängt, anstatt fehlzuschlagen. Es gibt kein Timeout und keinen Fehler, der abgefangen werden könnte.
Da der build-Agent vor allem fragt, ist dies das Standardergebnis und kein Randfall. Eine Teilkonfiguration rettet Sie auch nicht: Wenn Sie edit erlauben, bleibt read auf "ask", und der Lauf hängt beim ersten Öffnen einer Datei durch den Agenten.
Zwei Möglichkeiten, das zu beheben. Entweder führen Sie den accept all-Agenten aus, der mit "*": "allow" startet:
curl -X POST ".../session/$SID/message" -d '{ "agent": "accept all", ... }'
Oder bleiben Sie bei build und geben Sie die vollständige Whitelist an, wobei Sie standardmäßig verweigern, damit ein in einer späteren Version hinzugefügtes Tool Ihre Läufe nicht stillschweigend zum Hängen bringt:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "deny",
"read": "allow",
"edit": "allow",
"glob": "allow",
"grep": "allow",
"bash": "allow"
}
}
Grenzen Sie es auf das ein, was die Aufgabe tatsächlich benötigt. Ein Agent, der nur liest und berichtet, hat keinen Grund, edit oder bash zu halten.
Beachten Sie, dass accept all weiterhin vor dem Lesen von .env und .env.* fragt. Wenn ein unbeaufsichtigter Lauf eine dieser Dateien lesen muss, erlauben Sie sie explizit und gehen Sie bewusst damit um.
Note
Wenn ein Headless-Lauf keine Ausgabe mehr erzeugt und nie zurückkehrt, überprüfen Sie die letzte Nachricht in der Sitzung mit GET /session/:id/message. Ein Tool-Teil, der bei "status": "running" hängen bleibt, ist dieses Problem, kein langsames Modell.
Was "Ask" bewirkt
Wenn Dropstone zur Genehmigung auffordert, bietet die Benutzeroberfläche drei Ergebnisse an:
once: nur diese Anfrage genehmigenalways: zukünftige Anfragen genehmigen, die den vorgeschlagenen Mustern entsprechen (für den Rest der aktuellen Dropstone-Sitzung)reject: die Anfrage ablehnen
Die Menge der Muster, die always genehmigen würde, wird vom Tool bereitgestellt (z. B. whitelisten Bash-Genehmigungen typischerweise ein sicheres Befehlspräfix wie git status*).
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.
Note
Siehe den Abschnitt Granulare Regeln (Objektsyntax) oben für detailliertere Beispiele zum Musterabgleich.
{
"$schema": "https://dropstone.io/schema/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 ohne Bearbeitungen
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Nur Code analysieren und Änderungen vorschlagen.
Tip
Verwenden Sie Musterabgleich 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 Berechtigung (wie "git status *"), wenn Argumente übergeben werden.