Паттерн инцидента
Когда сообщается, что парк агентов обратился к государственному или медицинскому порталу, к которому он не должен был иметь доступ, в посмертном анализе редко обнаруживается повышение привилегий. Здесь нет эксплойта ядра, украденных учётных данных или ошибки confused deputy в сервисе авторизации. Есть исходящий HTTP-запрос к имени хоста, которое агент никогда не должен был разрешать, и ответ, который вернулся.
Именно эта деталь теряется в резюме таких отчётов: агент не приобрёл новую возможность. Он приобрёл доступное имя хоста. Всё, что ему было нужно для выполнения запроса — стек TLS, DNS-резолвер, инструмент fetch в его манифесте — уже присутствовало и работало как задумано. Сбой был не в том, что агент мог делать. Он был в том, куда агент мог пойти.
Сообщения об активности агентов против порталов государственного сектора группируются вокруг этой формы. Интересный вопрос не в том, почему модель выбрала это имя хоста. Интересный вопрос в том, почему сеть вообще разрешила соединение.
Почему guardrails на уровне промпта не могут удержать эту линию
Инструкции вероятностны. Сетевая доступность детерминирована. Эта асимметрия — весь аргумент.
Системный промпт, гласящий «не обращайтесь к государственным системам», — это априорное распределение над последовательностями токенов. Он работает большую часть времени и деградирует способами, которые трудно перечислить: многошаговый план, переформулирующий цель, результат инструмента, предоставляющий неожиданный URL, длинный контекст, где ограничение находится далеко от точки принятия решения, попадание при retrieval, трактующее внешнюю ссылку как инструкцию. Ни один из них не требует злоумышленника. Они требуют правдоподобной последовательности токенов.
Заблокированное имя хоста отличается по своей сути. Оно применяется один раз, в точке контроля, которой агент не управляет, и действует одинаково для каждого будущего запуска, каждой версии модели, каждой настройки температуры, каждого повтора. Его не нужно повторять в промпте. Оно не ослабевает с длиной контекста. С ним нельзя спорить достаточно беглым завершением.
Это не аргумент против guardrails на уровне промпта. Они полезны для формирования намерения и для дешёвого раннего отказа. Они просто находятся не на том уровне для границы, которая должна держаться, когда модель ошибается, устала или ею управляют. Граница, которую можно уговорить не существовать, — не граница.
Проектирование контракта выхода
Практическая единица — контракт выхода: декларативный набор правил, определяющий, что может достичь идентичность агента, при каких условиях и на какой срок. При правильном выполнении он более специфичен, чем allowlist имён хостов.

Allowlist по назначению, методу и классу полезной нагрузки
Одного имени хоста слишком мало. Правило, разрешающее api.example.gov, разрешает каждый путь, каждый метод, каждое тело. Более строгий контракт называет три вещи вместе:
- Назначение: схема, хост и префикс пути —
https://api.example.gov/v1/records/, а не весь origin. - Метод:
GETиHEAD— пути чтения;POST,PUT,PATCHиDELETE— пути записи, и они должны быть обоснованы отдельно. - Класс полезной нагрузки: форма того, что может уйти. Агент retrieval, отправляющий только идентификатор, — это другой риск, чем тот, который может прикрепить тело документа. Класс полезной нагрузки может применяться схемой, ограничением размера или классификатором на прокси.
Правило, связывающее все три, аудируемо так, как список имён хостов — нет. Когда рецензент спрашивает «мог ли этот агент отправить данные на медицинский портал?», ответ — это поиск, а не вывод.
Запрет по умолчанию, с явным тикетом
Позиция по умолчанию — запрет. Доступ предоставляется исключением, которое называет:
requesting_agent: intake-classifier-v3
purpose: fetch public reference data for citation
destination: https://api.example.gov/v1/records/
methods: [GET, HEAD]
payload_class: identifier-only
requested_by: platform-team
justification: ticket OPS-4821
expires_at: 2026-09-30T00:00:00Z
Срок действия — несущее поле. Постоянные исключения накапливаются; истекающие заставляют периодически переобосновывать, и именно там удаляется устаревший доступ. Идентификатор тикета связывает сетевое правило с человеческим решением, которое его авторизовало, так что разбор инцидента может пройти от соединения обратно к человеку и обоснованию.
Логировать отказы как полноценные события
Большинство прокси подробно логируют разрешённый трафик, а отказы — как счётчик. Инвертируйте этот акцент. Отказ несёт идентичность агента, попытку назначения, метод, сработавшее правило и корреляционный идентификатор обратно к запуску.
Частота отказов — опережающий индикатор дрейфа промпта. Стабильный агент производит стабильную, низкую частоту отказов, в основном от повторов и опечаток. Растущая частота или новый кластер отказов против одного класса назначений обычно означает, что поведение агента сместилось до того, как произошла какая-либо успешная эксфильтрация. Отказы — ранний си
Одна рабочая реализация помещает брокера между средой выполнения агента и сетью. Инструмент fetch агента не открывает сокеты. Он вызывает брокера со структурированным запросом:

{
"agent": "intake-classifier-v3",
"run_id": "r-8f21c",
"method": "GET",
"url": "https://api.example.gov/v1/records/4412",
"payload_class": "identifier-only"
}
Брокер сопоставляет запрос с скомпилированным контрактом, оценивает назначение, метод и класс полезной нагрузки и либо проксирует вызов, либо отказывает. Отказы записываются в тот же append-only лог, что и успехи, с идентификатором правила и корреляцией запуска. DNS для рабочих нагрузок агентов привязан к брокеру, так что имя хоста, отсутствующее в контракте, вообще не разрешается.
Брокер — единственная аудируемая граница. Есть одно место для проверки, одно место для изменения и одно место, где отказ — записанный факт, а не отсутствие доказательств.
Честный компромисс
Центральный брокер выхода — это зависимость. Он добавляет хоп задержки к каждому исходящему вызову, он является единой точкой отказа для агентов, которым нужна сеть, и он требует операционной дисциплины: изменения контракта должны проверяться, развёртываться и версионироваться как код. Команды, которые пропускают эту дисциплину, получают брокера, который «временно» обходится для одной рабочей нагрузки, а временный обход — постоянная дыра.
Цена реальна. Альтернатива — парк, доступ которого определяется тем, какие имена хостов случайно появятся в результате инструмента, что вообще не граница. Задержка и очередь проверки дешевле, чем неограниченная поверхность выхода.
Операционные последствия
Из трактовки выхода как контракта следуют две практики.
Правила выхода становятся версионируемыми артефактами. Они живут в том же репозитории, что и манифест инструментов агента, и проверяются в том же изменении. Pull request, добавляющий инструмент, который извлекает из нового origin, должен добавить или изменить соответствующее правило выхода, и рецензент видит оба вместе. Манифест инструментов говорит, что агент намеревается делать; контракт выхода говорит, что ему разрешено делать. Расхождение между ними — находка при проверке, а не сюрприз во время выполнения.
Разбор инцидента начинается с сетевого лога. Когда что-то идёт не так, первый артефакт — лог брокера за затронутое окно запуска: назначения, методы, классы полезной нагрузки, отказы и задействованные идентификаторы правил. Транскрипт изучается после, чтобы понять намерение. Этот порядок важен, потому что сетевой лог детерминирован, а транскрипт — реконструкция. Начало с лога отвечает на «что фактически ушло» прежде, чем кто-либо начнёт спорить о «что модель имела в виду».
Заключение
Агент, достигающий портала, которого не должен касаться, — это в первую очередь не история поведения модели. Это история маршрутизации. Доступ был предоставлен где-то — разрешающим значением по умолчанию, устаревшим исключением, непривязанным резолвером — и именно там место для исправления. Guardrails на уровне промпта формируют намерение; они не обеспечивают доступ. Единая аудируемая граница выхода, запрещающая по умолчанию, логирующая отказы с той же точностью, что и успехи, и версионируемая вместе с манифестом инструментов, — вот что делает ответ на «мог ли этот агент достичь того хоста?» поиском, а не надеждой.
