Правила доступа выглядят как glob, а ведут себя уже, и с этого начинаются неприятности. Правило сверяется с командой в том виде, в каком она написана, и в конце нет неявного подстановочного знака: правило, покрывающее тестовую команду, не покроет ту же команду с добавленным флагом. Запрет бьёт вопрос, вопрос бьёт разрешение, а всё несовпавшее падает к умолчанию текущего режима. Всё это легко произнести и трудно удержать в голове, когда пишешь дюжину правил. Здесь их можно проверить: вставьте правила, вставьте команды, которые собираетесь запускать, и увидите результат каждой рядом с решившим правилом. Инструмент также находит правила, которые не сработают никогда, включая разрешение под более широким запретом.
Возможности
Каждая команда с её исходом и решившим правилом
Запрет выше вопроса выше разрешения — как в настоящем разрешении
Находит правила, которые не сработают из-за более широкого правила
Находит разрешение, ставшее недостижимым из-за запрета
Сообщает о строках, которые вовсе не правила
Показывает несовпавшие команды, а не угадывает за вас
Подстановочные знаки как написаны — никакого невидимого совпадения в конце
Выдаёт блок разрешений для settings.json
Как использовать Тестер правил доступа
Вставьте правила «разрешить», «спросить» и «запретить»
Вставьте команды, которые ожидаете запускать
Прочтите исход каждой и решившее правило
Скопируйте блок разрешений в settings.json
Пример
Ввод
Bash(npm run test)
Результат
npm run test:unit — no rule matched
Неявного подстановочного знака нет: правило покрывает ровно эту команду.
Частые ошибки и устранение неполадок
Правило не покрывает ожидаемую команду. — В конце нет подстановочного знака. Bash(npm run test) совпадает только с этой командой; варианты покрывает Bash(npm run test:*).
Разрешённая команда всё равно спрашивает. — Совпало что-то с более высоким приоритетом. Для каждой команды перечислены все совпавшие правила в порядке разрешения.
Одно из правил помечено как недостижимое. — Более широкое правило с не меньшим приоритетом уже покрывает всё. Разрешение под широким запретом — типичный случай: запрет всегда побеждает, и разрешение не делает ничего.
Строка помечена как не являющаяся правилом. — Правила имеют вид Tool или Tool(шаблон). Голая команда без префикса инструмента правилом не является и игнорируется.
Часто задаваемые вопросы
Шаблон — это glob или регулярное выражение?
Строго говоря, ни то ни другое. Это буквальное совпадение, где * означает любую последовательность символов, применяемое к команде как она написана. Синтаксис регулярных выражений трактуется как обычный текст.
Что происходит с командой, под которую не подошло ни одно правило?
Она падает к поведению по умолчанию текущего режима доступа — это может быть вопрос или разрешение. Здесь такие показываются как несовпавшие, а не угадываются, потому что ответ зависит от режима, а не от правил.
Какое правило побеждает, если совпало несколько?
Запрет, затем вопрос, затем разрешение. Все совпадения показаны для каждой команды, чтобы видеть, что было перекрыто, а не выводить это.
Почему отмечается разрешение под запретом?
Потому что оно никогда не сработает — запрет всегда побеждает. Такие правила пишут как исключение из широкого запрета, и никакая ошибка не сообщает, что оно ничего не сделало.
Писать в основном разрешения или запреты?
Держатся именно запреты. Список разрешений делает рутину тихой; список запретов останавливает ровно то, чего вы никогда не хотите, и бьёт всё остальное.
Связанные инструменты
Конструктор хуков — Соберите хуки settings.json и поймайте матчеры, которые не сработают.
Конструктор субагентов — Соберите файл определения субагента с его инструментами и моделью.