權限
控制哪些操作需要核准才能執行。
Dropstone 使用 permission 設定來決定某個操作應該自動執行、提示您核准,還是予以封鎖。
舊版的 tools 布林值設定已棄用;它已併入 permission。舊的 tools 設定仍受支援,以維持向後相容。
操作
每個權限規則會解析為以下其中一種:
"allow":無需核准即可執行"ask":提示要求核准"deny":封鎖該操作
設定
您可以全域設定權限(使用 *),並覆寫特定工具。
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
您也可以一次設定所有權限:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": "allow"
}
細粒度規則(物件語法)
對於大多數權限,您可以使用物件,根據工具輸入套用不同的操作。
{
"$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"
}
}
}
規則會透過模式比對來評估,最後符合的規則勝出。常見的模式是先放置涵蓋所有情況的 "*" 規則,再放置更具體的規則。
萬用字元
權限模式使用簡單的萬用字元比對:
*比對零個或多個任意字元?比對剛好一個字元- 所有其他字元則逐字比對
家目錄展開
您可以在模式開頭使用 ~ 或 $HOME 來參照您的家目錄。這對於 external_directory 規則特別有用。
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
外部目錄
使用 external_directory 來允許觸及 Dropstone 啟動時工作目錄以外路徑的工具呼叫。這適用於任何以路徑作為輸入的工具(例如 read、edit、glob、grep 以及許多 bash 指令)。
家目錄展開(例如 ~/...)只會影響模式的撰寫方式。它不會讓外部路徑成為目前工作區的一部分,因此工作目錄以外的路徑仍必須透過 external_directory 來允許。
例如,這會允許存取 ~/projects/personal/ 下的所有內容:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
此處允許的任何目錄都會繼承與目前工作區相同的預設值。由於 read 預設為 allow,因此除非另有覆寫,否則 external_directory 下的項目也允許讀取。當工具在這些路徑中應受到限制時,請新增明確規則,例如封鎖編輯但保留讀取:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
請將清單聚焦在受信任的路徑上,並視需要為其他工具(例如 bash)疊加額外的允許或拒絕規則。
可用的權限
Dropstone 權限以工具名稱作為索引鍵,另外加上幾個安全防護:
read:讀取檔案(比對檔案路徑)edit:所有檔案修改(涵蓋edit、write、patch)glob:檔案萬用字元比對(比對 glob 模式)grep:內容搜尋(比對 regex 模式)bash:執行 shell 指令(比對解析後的指令,例如git status --porcelain)task:啟動子代理(比對子代理類型)skill:載入技能(比對技能名稱)lsp:執行 LSP 查詢(目前不支援細粒度)question:在執行期間向使用者提問webfetch:擷取 URL(比對 URL)websearch:網路搜尋(比對查詢)external_directory:當工具觸及專案工作目錄以外的路徑時觸發doom_loop:當相同的工具呼叫以相同的輸入重複 3 次時觸發
預設值
如果您未指定任何內容,Dropstone 會從寬鬆的預設值開始:
- 大多數權限預設為
"allow"。 doom_loop和external_directory預設為"ask"。read為"allow",但.env檔案預設為拒絕:
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}
「Ask」的作用
當 Dropstone 提示要求核准時,介面會提供三種結果:
once:僅核准此請求always:核准符合建議模式的未來請求(在目前 Dropstone 工作階段的其餘時間內)reject:拒絕此請求
always 會核准的模式集合由工具提供(例如,bash 核准通常會將安全指令前綴加入白名單,例如 git status*)。
代理
您可以為每個代理覆寫權限。代理權限會與全域設定合併,且代理規則優先。進一步了解代理權限。
Note:
請參閱上方細粒度規則(物件語法)一節,以取得更詳細的模式比對範例。
{
"$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"
}
}
}
}
}
您也可以在 Markdown 中設定代理權限:
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.
提示:
對於帶有引數的指令,請使用模式比對。"grep *" 允許 grep pattern file.txt,而單獨的 "grep" 則會封鎖它。諸如 git status 之類的指令適用於預設行為,但在傳遞引數時需要明確的權限(例如 "git status *")。