Dropstone Docs

Autorizzazioni

Controlla quali azioni richiedono approvazione per essere eseguite.

Dropstone utilizza la configurazione permission per decidere se una determinata azione deve essere eseguita automaticamente, se richiedere approvazione o se bloccarla.

La configurazione legacy tools booleana è deprecata; è stata incorporata in permission. La vecchia configurazione tools è ancora supportata per compatibilità con le versioni precedenti.


Azioni

Ogni regola di autorizzazione si risolve in una delle seguenti:

  • "allow": esegui senza approvazione
  • "ask": richiedi approvazione
  • "deny": blocca l'azione

Configurazione

Puoi impostare le autorizzazioni globalmente (con *) e sovrascrivere strumenti specifici.

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

Puoi anche impostare tutte le autorizzazioni contemporaneamente:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": "allow"
}

Regole Granulari (Sintassi Oggetto)

Per la maggior parte delle autorizzazioni, puoi utilizzare un oggetto per applicare azioni diverse in base all'input dello strumento.

{
  "$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"
    }
  }
}

Le regole vengono valutate tramite corrispondenza di pattern, con l'ultima regola corrispondente che vince. Un pattern comune è inserire la regola catch-all "*" per prima, seguita da regole più specifiche.

Caratteri Jolly

I pattern di autorizzazione utilizzano semplici corrispondenze con caratteri jolly:

  • * corrisponde a zero o più caratteri qualsiasi
  • ? corrisponde a esattamente un carattere
  • Tutti gli altri caratteri corrispondono letteralmente

Espansione della Directory Home

Puoi utilizzare ~ o $HOME all'inizio di un pattern per fare riferimento alla tua directory home. Questo è particolarmente utile per le regole external_directory.

  • ~/projects/* -> /Users/username/projects/*
  • $HOME/projects/* -> /Users/username/projects/*
  • ~ -> /Users/username

Directory Esterne

Utilizza external_directory per consentire chiamate di strumenti che toccano percorsi al di fuori della directory di lavoro in cui Dropstone è stato avviato. Questo si applica a qualsiasi strumento che accetta un percorso come input (ad esempio read, edit, glob, grep e molti comandi bash).

L'espansione della home (come ~/...) influisce solo su come viene scritto un pattern. Non rende un percorso esterno parte dell'area di lavoro corrente, quindi i percorsi al di fuori della directory di lavoro devono comunque essere consentiti tramite external_directory.

Ad esempio, questo consente l'accesso a tutto ciò che si trova sotto ~/projects/personal/:

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

Qualsiasi directory consentita qui eredita gli stessi valori predefiniti dell'area di lavoro corrente. Poiché read è impostato per impostazione predefinita su allow, anche le letture sono consentite per le voci sotto external_directory a meno che non vengano sostituite. Aggiungi regole esplicite quando uno strumento deve essere limitato in questi percorsi, ad esempio bloccando le modifiche mantenendo le letture:

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

Mantieni l'elenco focalizzato su percorsi affidabili e aggiungi regole di autorizzazione o negazione aggiuntive secondo necessità per altri strumenti (ad esempio bash).


Autorizzazioni Disponibili

Le autorizzazioni di Dropstone sono codificate per nome dello strumento, più un paio di protezioni di sicurezza:

  • read: lettura di un file (corrisponde al percorso del file)
  • edit: tutte le modifiche ai file (copre edit, write, patch)
  • glob: globbing di file (corrisponde al pattern glob)
  • grep: ricerca di contenuti (corrisponde al pattern regex)
  • bash: esecuzione di comandi shell (corrisponde ai comandi analizzati come git status --porcelain)
  • task: avvio di subagent (corrisponde al tipo di subagent)
  • skill: caricamento di una skill (corrisponde al nome della skill)
  • lsp: esecuzione di query LSP (attualmente non granulare)
  • question: fare domande all'utente durante l'esecuzione
  • webfetch: recupero di un URL (corrisponde all'URL)
  • websearch: ricerca web (corrisponde alla query)
  • external_directory: attivato quando uno strumento tocca percorsi al di fuori della directory di lavoro del progetto
  • doom_loop: attivato quando la stessa chiamata di strumento si ripete 3 volte con input identico

Valori Predefiniti

Se non specifichi nulla, Dropstone inizia con valori predefiniti permissivi:

  • La maggior parte delle autorizzazioni è impostata per impostazione predefinita su "allow".
  • doom_loop e external_directory sono impostati per impostazione predefinita su "ask".
  • read è "allow", ma i file .env sono negati per impostazione predefinita:
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

Cosa fa "Ask"

Quando Dropstone richiede approvazione, l'interfaccia utente offre tre risultati:

  • once: approva solo questa richiesta
  • always: approva le richieste future che corrispondono ai pattern suggeriti (per il resto della sessione Dropstone corrente)
  • reject: nega la richiesta

L'insieme di pattern che always approverebbe è fornito dallo strumento (ad esempio, le approvazioni bash in genere inseriscono nella whitelist un prefisso di comando sicuro come git status*).


Agent

Puoi sovrascrivere le autorizzazioni per agent. Le autorizzazioni dell'agent vengono unite alla configurazione globale e le regole dell'agent hanno la precedenza. Scopri di più sulle autorizzazioni dell'agent.

Note:

Fai riferimento alla sezione Regole Granulari (Sintassi Oggetto) sopra per esempi di corrispondenza di pattern più dettagliati.

{
  "$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"
        }
      }
    }
  }
}

Puoi anche configurare le autorizzazioni dell'agent in Markdown:

---
description: Code review without edits
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---

Only analyze code and suggest changes.

Suggerimento:

Utilizza la corrispondenza di pattern per i comandi con argomenti. "grep *" consente grep pattern file.txt, mentre "grep" da solo lo bloccherebbe. Comandi come git status funzionano per il comportamento predefinito ma richiedono un'autorizzazione esplicita (come "git status *") quando vengono passati argomenti.

Ctrl+I