shell.exec в порядке
для ls; это катастрофа для rm -rf /. db.query в порядке против реплики;
против prod это обуза. Разница живёт в аргументах, и правило имени
инструмента её не видит.
Клаузы аргументов Firewall (args_match_json) закрывают этот пробел. Они
инспектируют конкретные аргументы, которые модель выбрала для вызова
инструмента, и решают вердикт по их значениям — так что вы можете разрешить
инструмент широко, отклоняя одну опасную форму, которую он может принять. Эта
страница — сфокусированное руководство по созданию таких клауз; о полном
словаре правил см. Правила Firewall, а о модели
политик вокруг них — Firewall.
Значения аргументов существуют только когда модель выбрала, как вызвать
инструмент, так что клаузы аргументов принадлежат стадиям
response и mcp. На inbound — где агент только рекламирует определения
инструментов — нет аргументов времени вызова, которые можно проверить.1. Когда проверять аргументы вызова инструмента
Тянитесь за клаузой аргумента всякий раз, когда инструмент безопасен в целом, но опасен в конкретной форме:Деструктивные команды
Разрешить
shell.exec, но отклонить, когда команда совпадает с rm -rf,
mkfs или dd if=.Production-радиус поражения
Разрешить
db.query, но отклонить (или удержать для подтверждения),
когда цель подключения — prod.Внутренние назначения
Разрешить инструмент извлечения, но отклонить, когда его аргумент
url/ip попадает в диапазон RFC-1918 или IP cloud-metadata.Чрезмерные операции
Разрешить bulk-инструмент, но отклонить, когда аргумент
limit или
count превышает числовой потолок.2. Форма набора клауз
args_match_json — это JSON-кодированная строка, чьё декодированное
значение — объект, содержащий список clauses. Каждая клауза — это тройка
{ path, op, value }, и все клаузы объединяются по AND — правило
срабатывает только когда каждая клауза истинна. Декодированное значение
выглядит так:
"args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}".
Пустой или отсутствующий args_match_json вакуумно истинен — правило
совпадает по своему глобу имени инструмента в одиночку, ровно как делает
правило только-по-имени.
3. Операторы
Семь операторов составляют закрытый словарь. Консоль валидирует оператор и форму его значения при сохранении, так что некорректная клауза никогда не сохраняется.| Оператор | Совпадает, когда |
|---|---|
eq | Скалярное равенство (числа сравниваются численно; несовпадение типов — не совпадение). |
contains | Подстрока — оба операнда должны быть строками. |
regex | Шаблон Go RE2 совпадает со строковым значением (линейное время, без обратных ссылок). |
in | Значение — элемент данного JSON-массива. |
cidr_match | Строковый IP попадает внутрь данного CIDR. |
gt / lt | Численно больше / меньше (строки не приводятся). |
4. Синтаксис пути
path клаузы — это маленькое подмножество JSONPath над объектом аргументов
инструмента:
$.foo, $.foo.bar — доступ к полю
$.foo, $.foo.bar — доступ к полю
Прочитать поле объекта верхнего уровня или вложенное по имени.
$.foo[0], $.arr[1].k — индексирование массива
$.foo[0], $.arr[1].k — индексирование массива
Индексировать в массив, опционально продолжая в поля элемента.
$ — весь объект аргументов
$ — весь объект аргументов
Совпасть со всем блобом аргументов (полезно с
contains или regex для
грубого сканирования).5. Проработанный пример
Вы позволяете своим агентам свободно запускатьshell.exec, но рекурсивное
принудительное удаление никогда не должно достигать shell. Создайте одно
правило стадии response, которое отклоняет shell.exec только когда
аргумент команды выглядит деструктивным.
Откройте редактор правил
В консоли откройте политику firewall, привязанную к ключу вашего агента
(или default рабочего пространства), и добавьте правило. Редактирование
политик — действие Developer+ — Members могут читать политики, но не
писать их.
Сопоставьте инструмент на стадии response
Установите стадию в
response, а глоб инструмента в shell.exec. Стадия
response несёт выбранные моделью аргументы, которые нужны клаузе.Добавьте клаузу аргумента
Добавьте одну клаузу
regex на $.command, затем установите вердикт в
deny:args_match_json — это JSON-кодированная строка; её декодированное
значение — объект { "clauses": [ … ] }, показанный в §2.Прогоните вхолостую, прежде чем полагаться на него
Используйте вкладку Test, чтобы
вычислить правило против образца вызова
shell.exec. Она возвращает
вердикт, совпавшее правило и причину — ничего не диспетчеризуется и ничего
не сохраняется.shell.exec с "command": "ls -la" проходит как раньше, тогда как
"command": "rm -rf /var" отклоняется. Deny на response позволяет модели
увидеть ошибку инструмента и среагировать — выбрать другой инструмент,
спросить пользователя или остановиться — вместо падения.
6. Клаузы fail closed — правило, а не запрос
Если клаузу нельзя вычислить — путь не разрешается, аргументы некорректны или regex / CIDR недействителен — клауза вычисляется в false, и правило просто не срабатывает. Вызов проваливается к следующему правилу илиdefault_verdict политики. Сломанная клауза никогда не авто-отклоняет и
никогда не беспокоит ретрансляцию.
7. Сочетание клауз с остальным правилом
Клаузы аргументов складываются со всем остальным, что выражает правило — они одно AND-условие среди нескольких:| Сочетать с | Эффект |
|---|---|
tool_name_glob | Клауза выполняется только когда имя инструмента совпало — имя первым, аргументы вторыми. |
skill_name_glob | Ограничивайте аргументы того же инструмента по-разному по владеющему навыку (например, строже на community.*). |
verdict | Сочетайте клаузы с deny, sanitize, pending_approval или cap_cost, не только с deny. |
| Несколько клауз | Все должны держаться — сочетайте проверку команды regex с проверкой окружения in, чтобы ограничить deny узко. |
8. Куда это вписывается
Правила Firewall
Полный справочник правил — глобы, клаузы, sanitizer’ы, egress и
последовательности.
Кулинарная книга аргументов
Готовые рецепты
args_match_json для распространённых опасных форм.Стадии Firewall
Почему клаузы аргументов живут на
response и mcp, а не inbound.Блокировать инструменты
Отклонить инструмент полностью, когда ни один аргумент не безопасен.
