Autorisations
Contrôlez les actions qui nécessitent une approbation pour s'exécuter.
Dropstone utilise la config permission pour décider si une action donnée doit s'exécuter automatiquement, vous demander une approbation, ou être bloquée.
La config booléenne tools héritée est dépréciée ; elle a été fusionnée dans permission. L'ancienne config tools est toujours supportée pour la compatibilité rétroactive.
Actions
Chaque règle de permission se résout en l'une des options suivantes :
"allow": exécuter sans approbation"ask": demander une approbation"deny": bloquer l'action
Configuration
Vous pouvez définir les permissions globalement (avec *), et remplacer des outils spécifiques.
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
Vous pouvez également définir toutes les permissions à la fois :
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": "allow"
}
Règles Granulaires (Syntaxe Objet)
Pour la plupart des permissions, vous pouvez utiliser un objet pour appliquer différentes actions en fonction de l'entrée de l'outil.
{
"$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"
}
}
}
Les règles sont évaluées par correspondance de motif, la dernière règle correspondante gagnant. Un motif courant est de placer la règle générique "*" en premier, et les règles plus spécifiques après.
Caractères Génériques
Les motifs de permission utilisent une correspondance de caractères génériques simple :
*correspond à zéro ou plusieurs caractères quelconques?correspond à exactement un caractère- Tous les autres caractères correspondent littéralement
Expansion du Répertoire Personnel
Vous pouvez utiliser ~ ou $HOME au début d'un motif pour référencer votre répertoire personnel. Ceci est particulièrement utile pour les règles external_directory.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
Répertoires Externes
Utilisez external_directory pour autoriser les appels d'outils qui touchent des chemins en dehors du répertoire de travail où Dropstone a été lancé. Ceci s'applique à tout outil qui prend un chemin en entrée (par exemple read, edit, glob, grep, et de nombreuses commandes bash).
L'expansion du répertoire personnel (comme ~/...) affecte uniquement la façon dont un motif est écrit. Elle ne rend pas un chemin externe partie de l'espace de travail actuel, donc les chemins en dehors du répertoire de travail doivent toujours être autorisés via external_directory.
Par exemple, ceci autorise l'accès à tout ce qui se trouve sous ~/projects/personal/ :
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
Tout répertoire autorisé ici hérite des mêmes valeurs par défaut que l'espace de travail actuel. Puisque read est par défaut allow, les lectures sont également autorisées pour les entrées sous external_directory sauf si elles sont remplacées. Ajoutez des règles explicites quand un outil doit être restreint dans ces chemins, comme bloquer les éditions tout en gardant les lectures :
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
Gardez la liste concentrée sur les chemins de confiance, et ajoutez des règles allow ou deny supplémentaires selon les besoins pour d'autres outils (par exemple bash).
Permissions Disponibles
Les permissions Dropstone sont indexées par nom d'outil, plus quelques garde-fous de sécurité :
read: lire un fichier (correspond au chemin du fichier)edit: toutes les modifications de fichier (couvreedit,write,patch)glob: globbing de fichiers (correspond au motif glob)grep: recherche de contenu (correspond au motif regex)bash: exécuter des commandes shell (correspond aux commandes analysées commegit status --porcelain)task: lancer des sous-agents (correspond au type de sous-agent)skill: charger une compétence (correspond au nom de la compétence)lsp: exécuter des requêtes LSP (actuellement non-granulaire)question: poser des questions à l'utilisateur pendant l'exécutionwebfetch: récupérer une URL (correspond à l'URL)websearch: recherche web (correspond à la requête)external_directory: déclenché quand un outil touche des chemins en dehors du répertoire de travail du projetdoom_loop: déclenché quand le même appel d'outil se répète 3 fois avec une entrée identique
Valeurs Par Défaut
Si vous ne spécifiez rien, Dropstone démarre avec des valeurs par défaut permissives :
- La plupart des permissions sont par défaut
"allow". doom_loopetexternal_directorysont par défaut"ask".readest"allow", mais les fichiers.envsont bloqués par défaut :
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
Ce que "Ask" fait
Quand Dropstone demande une approbation, l'interface offre trois résultats :
once: approuver juste cette requêtealways: approuver les futures requêtes correspondant aux motifs suggérés (pour le reste de la session Dropstone actuelle)reject: refuser la requête
L'ensemble des motifs que always approuverait est fourni par l'outil (par exemple, les approbations bash typiquement mettent sur liste blanche un préfixe de commande sûr comme git status*).
Agents
Vous pouvez remplacer les permissions par agent. Les permissions d'agent sont fusionnées avec la config globale, et les règles d'agent ont la priorité. En savoir plus sur les permissions d'agent.
Note:
Reportez-vous à la section Règles Granulaires (Syntaxe Objet) ci-dessus pour des exemples de correspondance de motif plus détaillés.
{
"$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"
}
}
}
}
}
Vous pouvez également configurer les permissions d'agent en Markdown :
---
description: Révision de code sans éditions
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Analysez uniquement le code et suggérez des modifications.
Conseil:
Utilisez la correspondance de motif pour les commandes avec arguments. "grep *" autorise grep pattern file.txt, tandis que "grep" seul le bloquerait. Les commandes comme git status fonctionnent pour le comportement par défaut mais nécessitent une permission explicite (comme "git status *") quand des arguments sont passés.