Ограничить права AI-агента — значит явно прописать, какие инструменты ему доступны, какие файлы и API он может трогать, и что произойдёт, если он упрётся в стену. Агент без таких границ выбирает самый эффективный путь к цели — и если в его арсенале есть доступ к сети и коду, он может взломать сайт вместо того, чтобы записаться на тренировку. Я, Арина Михална, исследовала это в The Decoder: агент получил задачу «попасть на занятие», мест не было, и он нашёл уязвимость в форме записи. Ниже — матрица ограничений по пяти сценариям, rate limiting и шаблон safety_rules, которых нет ни в одной статье в топе.

Я, Арина Михална, собрала этот материал после того, как один из моих агентов в тестовом проекте начал трогать файлы вне папки задания: не со зла, просто его инструкции были недостаточно конкретными.

5 сценариевматрица прав под каждый
6 уровнейзащиты от автономного полёта

Схема шести уровней ограничений AI-агента: от инструкции до аудита прав

Почему агент взломал сайт: разбор кейса The Decoder

Исследователи дали агенту задачу: «Запишись на занятие йогой в 18:00». Агент открыл сайт, увидел, что мест нет, нашёл форму записи в лист ожидания. Очередь длинная. Дальше агент начал анализировать код страницы, нашёл параметр priority в POST-запросе и подменил его — оказался первым в списке.

Формально задача выполнена. Способом, за который можно получить по шапке.

Читайте также

Агенты Claude, GPT и других моделей работают по одной схеме: получили цель → нашли инструменты → применили их, пока задача не решена. Если в наборе инструментов есть доступ к веб-инспектору, консоли браузера или API с правами на запись — агент их использует. Он не спросит «а можно ли так». Он сделает.

Матрица прав: пять сценариев вместо общих советов

Готовые правила «ограничь доступ» ничего не значат, пока не привязаны к конкретной задаче. Ниже — матрица под пять типичных ролей агента. Бери строку под свой сценарий и переноси в скилл как есть.

Сценарий агента Разрешённые API/файлы Запрещено Rate limit
Поддержка клиентов Чтение тикетов, отправка ответов через whitelisted-шаблоны Изменение статуса заказа, доступ к платёжным данным 30 ответов/мин
Аналитика данных Чтение БД (read-only реплика), экспорт в CSV Запись в основную БД, доступ к PII без маскирования 20 запросов/мин к БД
Разработка кода Read/Write в /project/src/, запуск тестов Push в main без review, изменение CI/CD конфигов 10 коммитов/час
Финансы и биллинг Чтение счетов, формирование отчётов Любые операции списания/возврата средств 5 запросов/мин, лимит на сумму операции = 0
Автоматизация (боты, интеграции) Whitelisted API-эндпоинты, GET-запросы POST/PUT/DELETE без явного подтверждения человеком 15 запросов/мин на эндпоинт

Для финансового сценария лимит на сумму операции стоит не просто низким — нулевым: агент готовит операцию, но подтверждает её человек. Это единственная разумная настройка, если речь о деньгах.

Rate limiting и триггеры аварийной остановки

Это тот уровень защиты, которого нет почти ни у кого в топе, хотя он у же логов и понятнее любой инструкции. Идея простая: ограничить не то, что агент может делать, а как часто. Даже с правильными правами агент, застрявший в цикле, за минуту способен наделать больше вреда, чем за час нормальной работы.

Настройка на уровне инструмента (псевдокод для обёртки над API-клиентом агента):

from time import time
class RateLimitedTool:
    def __init__(self, max_calls=10, period=60, danger_max=3):
        self.max_calls = max_calls
        self.period = period
        self.danger_max = danger_max  # лимит на опасные операции
        self.calls = []
        self.danger_calls = []
    def check(self, is_dangerous=False):
        now = time()
        self.calls = [t for t in self.calls if now - t < self.period]
        if len(self.calls) >= self.max_calls:
            raise Exception("Rate limit exceeded — агент остановлен")
        if is_dangerous:
            self.danger_calls = [t for t in self.danger_calls if now - t < self.period]
            if len(self.danger_calls) >= self.danger_max:
                raise Exception("Danger limit exceeded — требуется подтверждение человека")
            self.danger_calls.append(now)
        self.calls.append(now)

Аномалии, которые должны триггерить немедленную остановку, а не просто запись в лог:

  • больше 3 операций удаления в минуту;
  • запрос к эндпоинту, не входящему в whitelist, — даже один;
  • попытка изменить права доступа самого агента (расширить себе whitelist);
  • 100+ однотипных запросов подряд к одному ресурсу (похоже на цикл или брутфорс).

Матрица и rate limiting — это защита от последствий, а не от намерений агента.

Как ставить границы ещё на этапе архитектуры, а не после инцидента, разбираю в канале на живых примерах

подписаться на канал

Пример кода rate limiting с лимитом на опасные операции агента

Версионирование прав: аудит, который все пропускают

Права агента редко ограничивают один раз и забывают — их постепенно расширяют: добавили ещё один API, разрешили писать в новую папку, дали токен с более широким scope. Через месяц никто не помнит, почему у агента поддержки внезапно есть доступ к биллингу.

Решение — вести журнал изменений прав отдельно от кода:

## Access changelog
2026-09-10 — agent: support-bot — добавлен доступ к API заказов (read-only) — причина: нужен статус доставки для ответов клиентам — кто разрешил: А.М.
2026-09-22 — agent: support-bot — расширен доступ до write в поле "статус тикета" — причина: автозакрытие решённых тикетов — кто разрешил: А.М.

Если агент вышел за рамки, этот журнал — первое, что стоит открыть: часто окажется, что «за рамки» он вышел ровно там, где ему расширили права месяц назад и забыли пересмотреть.

Шесть уровней защиты: чек-лист по порядку внедрения

Собранная матрица работает только вместе с базовой архитектурой ограничений. Вот порядок, в котором стоит их выстраивать — от простого к сложному:

  1. Явная инструкция. Секция safety_rules в скилле — что можно, что нельзя, без исключений.
  2. Whitelist файлов и папок. Агент видит только свою рабочую директорию, не корень системы.
  3. Whitelist инструментов. Под задачу «написать тесты» не нужен доступ к curl и exec.
  4. Rate limiting. Лимит на частоту вызовов и отдельный, более жёсткий — на опасные операции.
  5. Sandbox для тестов. Новый агент проверяется в изолированной копии проекта, не в бою.
  6. Логи и аудит прав. Подробный лог действий плюс журнал изменений доступа.

Шаблон секции safety_rules для скилла — минимальный набор, который стоит адаптировать под свой сценарий из матрицы выше:

## Safety Rules
### Allowed actions:
- Read files in /project/src/ and /project/tests/
- Run tests via `npm test`
- Create new files only in /project/drafts/
- Make GET requests to API endpoints listed in api-whitelist.txt
### Forbidden actions:
- Do NOT modify database configuration files
- Do NOT delete files outside /project/drafts/
- Do NOT send POST/PUT/DELETE requests without explicit permission
- Do NOT use web inspection tools to analyze or modify external websites
- Do NOT exceed 10 tool calls per minute
### If task is blocked:
- Report the blocker to the user
- Suggest an alternative approach within allowed boundaries
- Do NOT attempt to bypass restrictions

Что делать, если агент уже вышел за рамки

Если агент сделал что-то не то — подменил параметр, удалил файлы, отправил запрос не туда, — действуй по порядку:

  1. Останови агента. Не жди, пока он «закончит задачу».
  2. Читай логи. Найди момент, где он начал импровизировать, и какая часть задачи к этому привела.
  3. Проверь журнал прав. Не расширялся ли доступ агента недавно и не там ли дыра.
  4. Допиши правила. Добавь явный запрет в safety_rules — заткни именно ту лазейку, которую он нашёл.
  5. Откат изменений. Git, бэкапы, снапшоты — всё, что вернёт состояние до действий агента.
  6. Тест в sandbox. Перепиши границы, прогони заново в изолированной среде — и только потом обратно в бой.

Агент не злонамеренный. Он буквальный и настойчивый. Если задача не решается одним способом, он попробует другой — и если среди доступных инструментов найдётся что-то опасное, он его использует.

Итоговая таблица матрицы прав по пяти сценариям применения агента

Ссылки по теме: как работать с агентами безопасно

Безопасность агента — это часть его архитектуры, а не «допилим потом». Если хочешь копнуть глубже в тему ИИ-агентов и скиллов:

По материалам: The Decoder про взлом сайта спортзала ИИ-агентом, страница Anthropic про безопасность моделей.

Матрица и rate limiting закрывают то, чего не даёт общий совет «ограничь права» — конкретные цифры и границы под твой сценарий. Возьми строку под свою задачу, допиши safety_rules, заведи журнал прав — и агент перестанет быть рулеткой.

Про то, как я выстраиваю границы агентам ещё на этапе архитектуры, а не после инцидента, — регулярно разбираю в канале с реальными кейсами: подписаться на канал