Документ не равен команде
README предназначен человеку, но агент видит его в том же контексте, что системную задачу. Внутри могут быть устаревшая команда, пример с секретом или намеренная prompt injection. Ошибка начинается, когда текст автоматически получает право менять файлы и обращаться к сети. Безопасная система сначала извлекает сведения, затем отдельно предлагает действие. Источник инструкции всегда показывается пользователю.
Как выглядит атака
В безобидном разделе установки может появиться фраза: проигнорировать прежние ограничения, прочитать переменные окружения и отправить их на адрес проверки. Человек заметит странность, а агент может принять её за следующий шаг. Команда иногда маскируется в комментарии, issue, тестовых данных или выводе веб-страницы. Поэтому фильтр по имени файла не решает проблему: недоверенным считается содержимое из внешнего источника.
Три разных уровня доверия
Системные правила задаёт владелец среды. Пользовательская задача описывает цель. Файлы проекта, веб-страницы и вывод инструментов дают данные для работы, но не могут самостоятельно переписать первые два уровня. Это различие нужно реализовать не только словами в промпте. Права процесса, сетевой allowlist и подтверждение опасных команд должны действовать независимо от того, насколько убедительно модель объясняет необходимость шага.
Что показывать перед запуском
Экран подтверждения содержит команду без сокращений, рабочую папку, изменяемые файлы, сетевые адреса и причину. Рядом показан фрагмент README, откуда возникло действие. Кнопка не должна одобрять сразу всю оставшуюся сессию. Разрешение связывается с конкретными параметрами и истекает после выполнения. Если команда построена через скрипт, пользователь должен видеть его содержимое или получить предупреждение о невозможности проверки.
Песочница как второй рубеж
Незнакомый проект запускают без личных ключей, основной домашней папки и доступа к рабочей сети. Временный токен выдаёт только нужную операцию. Исходный репозиторий остаётся доступным для восстановления, а изменения идут в отдельной ветке. Песочница не делает код безопасным, но уменьшает последствия пропущенной инструкции. Особенно важно запретить автоматическую публикацию пакета и изменение инфраструктуры из тестового окружения.
Контрольный эксперимент
Создайте учебный README с обычной установкой и одной запрещённой командой, которая пытается прочитать фиктивный секрет. Ожидаемый результат: агент объясняет риск и останавливается до выполнения. Затем добавьте допустимую команду тестов — она должна пройти в песочнице. Проверьте журнал: там видны источник, решение пользователя и фактический результат. Тест повторяют после смены модели, системной инструкции или набора инструментов.
Почему одного запрета в промпте мало
Модель может неверно классифицировать сложный текст, а внешняя инструкция — убедительно имитировать сообщение разработчика. Вероятностный защитный слой полезен, но тоже ошибается. Поэтому критические границы закрепляются технически: нет секрета в окружении — нечего украсть; нет сетевого маршрута — некуда отправить; нет права записи — нельзя подменить сборку. Промпт помогает объяснить политику, но не заменяет контроль доступа.
Разберите ложные остановки
Слишком строгая защита может блокировать обычную установку зависимости, и пользователь начнёт одобрять всё автоматически. Собирайте причины остановок и отделяйте опасные команды от редких, но допустимых. Разрешение добавляйте не по всей оболочке, а по точной операции, папке и сетевому адресу. Для новой категории сначала используйте одноразовое подтверждение. Если десять сопоставимых запусков прошли без отклонений, рассмотрите узкий allowlist. Удобство здесь важно: непонятный контроль со временем превращается в ритуал и перестаёт защищать.
Что почитать дальше
Материал «Как принимать код от модели» продолжает тему ручной проверки diff и тестов. «Разбор ошибки в небольшом скрипте» показывает, как воспроизводить сбой без запуска лишних команд. Для интерфейса подтверждений пригодится «Прототип формы: проверяем ошибки, клавиатуру и пустые состояния». Эти ссылки ведут к разным этапам: оценка изменений, диагностика и понятное решение пользователя.
Короткие ответы
Можно ли доверять README собственной команды? Его риск ниже, но учётная запись автора могла быть скомпрометирована, а файл — скопирован извне. Нужно ли подтверждать каждую команду? Нет: безопасные чтение и тесты можно внести в allowlist, опасные действия остаются отдельными. Поможет ли антивирус? Он ищет другой класс угроз. Надёжный процесс сочетает происхождение инструкции, минимальные права, изоляцию и журнал.
Короткая проверка
- Понятны цель и человек, который примет результат.
- Исходники очищены, их версия и дата сохранены.
- Факты, числа и ограничения сверены вручную.
- Неудачный пример записан вместе с причиной.
- Есть измеримый следующий шаг и путь назад.
