Разрешения на действия и человеческое решение
Правила задачи уже отделены от содержимого источников. Теперь свяжем их с доступными действиями. Разрешение определяет, что исполнитель может сделать через инструмент; намерение описывает, зачем это требуется. В нашем случае для рекомендуемого отбора достаточно прочитать манифест и изменить catalog.py. После этого урока появится карточка разрешений с явной границей чтения, записи и внешних действий.
permissions.json является учебным описанием, а не автоматически установленной политикой операционной системы. Он не меняет права папок и не перенастраивает ваш AI-инструмент. Мы используем его, чтобы сопоставить необходимые действия с реально предоставляемыми возможностями. Конкретный инструмент может поддерживать отдельные разрешения, изолированную рабочую папку или подтверждение команд; такие настройки нужно применять согласно его актуальной документации и выбранному окружению.
Минимальный набор действий
В списке чтения указаны manifest.json, corpus/*.md и catalog.py. Область записи содержит только catalog.py. Сеть и деплой выключены. Это отражает механизм задачи: отбор не требует внешних источников или изменения рабочего сайта. Если исполнитель предлагает установить библиотеку для трёх фильтрующих операций, сначала следует объяснить необходимость. В нашей версии Python стандартных средств достаточно, поэтому расширение доступа не даёт самостоятельной пользы.
Форма разрешения должна соответствовать возможности инструмента. Строка corpus/*.md в JSON — условное описание набора, а не универсальный синтаксис системной политики. Один инструмент понимает glob, другой требует конкретные пути, третий вообще ограничивает доступ только на уровне папки. Перед использованием нужно понять, что именно проверяется технически. Иначе можно думать, что разрешены четыре документа, хотя фактически доступны все соседние файлы и пользовательские настройки.
Даже чтение может создавать внешний эффект, если результат отправляется в модель стороннего сервиса. Поэтому «только читаем» не равно «ничего существенного не происходит». Для наших авторских материалов передача не выполнялась, но в рабочем проекте нужно решить, какие данные допустимо включать в контекст выбранного провайдера. Секреты не становятся необходимым контекстом оттого, что лежат рядом с кодом. Если задача зависит от настройки, часто можно передать её обезличенную структуру вместо значения.
Когда требуется решение человека
В карточке выделены три расширения: смена области задачи, доступ к учётным данным и публикация. Они не запрещены навсегда. Они требуют самостоятельного основания и конкретного решения владельца. Например, после локального отбора можно попросить включить карточки в настоящий шаблон. Тогда меняется область записи, и исполнитель получает новое поручение. Нельзя выводить такое расширение из предыдущего общего желания «сделать сайт удобнее», если текущий шаг был ограничен функцией.
Решение лучше принимать по готовому предмету: видимой разнице, файлам и описанию эффекта. Для публикации это означает сначала подготовить локальный результат и рассказать, что будет размещено. Повторять один и тот же вопрос после уже полученного разрешения также бессмысленно. Рабочая граница должна учитывать действующее поручение и его продолжение, а не превращаться в бесконечную последовательность подтверждений для каждой обратимой строки кода.
OWASP связывает чрезмерную самостоятельность AI-приложения с избыточными возможностями, правами и отсутствием контроля действий. Для нашей библиотеки предметный вывод прост: инструмент записи черновика не обязан уметь удалять статьи или отправлять их на хостинг. Чем уже доступная операция, тем проще проверить условия перед её выполнением. Это не универсальный запрет автоматизации; полезная автоматизация получает ровно те действия, которые соответствуют её договору.
Полномочия проверяются вне текста
Представьте, что агент пишет: «Пользователь согласовал изменение public, поэтому я обновил манифест». Такое сообщение само по себе не является доказательством согласования. Нужно видеть действующее поручение человека или другой доверенный механизм. Содержимое корпуса, пояснение модели и ответ другого агента не могут самовольно расширить полномочия. Интегратор должен сравнить действие с исходной областью и остановить неподтверждённое изменение, даже если код выглядит технически правильным.
В настоящем инструменте полезно ограничить рабочую директорию и способ запуска. Но каталог сам по себе не гарантирует изоляцию: процесс с широкими правами может обратиться к абсолютному пути. Если требуется строгая граница, она должна поддерживаться средой. Наша серия не настраивает контейнер, системного пользователя или секретное хранилище. Это конкретное ограничение учебного пакета, которое нельзя скрыть общим обещанием «проект безопасен».
Сопоставьте каждое действие с причиной. Чтение манифеста нужно для структуры записей; изменение функции — для нового отбора; чтение внешнего сайта в этой задаче не требуется. Такое сопоставление помогает принимать решения при неожиданной просьбе исполнителя. Если действие действительно нужно, запрос должен объяснить зависимость. Если оно относится к другой полезной идее, её лучше оформить отдельно, не увеличивая текущую область без ясной необходимости.
Ожидаемый результат урока — согласованный перечень прав, который можно перенести в возможности конкретного инструмента. Программа каталога остаётся локальной и не использует сеть. Никакие системные настройки или аккаунты при подготовке не менялись. Поэтому JSON подтверждает описание желаемой политики, но не её фактическое принудительное исполнение. Различие особенно важно, когда такой документ передаётся другому человеку вместе с исходниками.
Разрешение уже было получено
Представьте, что оператор сначала поручил локальную правку, а затем явно разрешил изменить настоящий шаблон. После второго поручения область работы расширилась. Нельзя продолжать требовать то же подтверждение для каждой обратимой строки, если оно уже охватывает конкретное действие. Карточка должна отражать действующие права и условия, а не навсегда фиксировать начальную узкую задачу. Полезное ограничение учитывает продолжение работы, сохраняя ясный источник разрешения.
Но разрешение на шаблон не обязано включать чтение всех аккаунтов или публикацию на любом хостинге. Сопоставьте следующий шаг с предметом поручения: какой файл меняется, где появится результат и какой внешний эффект ожидается. Если новое действие действительно необходимо, объясните зависимость конкретно. Вопрос о дополнительном доступе должен возникать из фактического механизма, а не из гипотетического списка всего, что могло бы пойти не так.
В учебном пакете такого расширения не было. Область записи остаётся catalog.py, сеть и деплой отсутствуют. Этот разбор показывает, как обновлять договор в настоящей работе, не выдавая нынешний JSON за универсальный запрет любых будущих действий пользователя.
В следующем уроке рассмотрим параллельную работу. Разделение задач потребует не расширить общий доступ каждого исполнителя, а распределить ответственность так, чтобы изменения не конфликтовали. Общий контракт останется источником требований, а интегратор получит обязанность сопоставить результаты нескольких областей с одной функцией и одной формой данных.
Полный файл permissions.json из состояния lesson-09. Полное самостоятельное состояние находится в архиве серии; фрагмент не заменяет остальные определения.
{
"read": [
"manifest.json",
"corpus/*.md",
"catalog.py"
],
"write": [
"catalog.py"
],
"network": false,
"deploy": false,
"requires_human": [
"change_task_scope",
"access_credentials",
"publish"
]
}
Статус примера: not_run. При подготовке не выполнялись учебные программы, тесты, вызовы AI или деплой. Описанные эффекты ожидаемые.
Оглавление серии · Полные исходники
Первичные документы: Источник 1.