Разрешения
Контролируйте, какие действия требуют одобрения для выполнения.
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: выполнение команд оболочки (совпадает с разобранными командами, например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 *"), когда передаются аргументы.