shell.exec jest w porządku dla ls; jest katastrofą dla rm -rf /.
db.query jest w porządku wobec repliki; wobec prod to ryzyko. Różnica
żyje w argumentach, a reguła nazwy narzędzia jej nie widzi.
Klauzule argumentów firewalla (args_match_json) zamykają tę lukę.
Inspekcjonują konkretne argumenty, które model wybrał dla wywołania
narzędzia, i decydują o werdykcie na podstawie ich wartości — więc możesz
pozwolić na narzędzie szeroko, a odmówić jednego niebezpiecznego kształtu,
który może przyjąć. Ta strona to skupiony przewodnik po pisaniu tych
klauzul; dla pełnego słownika reguł zobacz
Reguły Firewall, a dla modelu polityki wokół
nich Firewall.
Wartości argumentów istnieją dopiero, gdy model wybrał, jak wywołać
narzędzie, więc klauzule argumentów należą na etapach
response i mcp
(etapy). Na inbound — gdzie agent tylko
ogłasza definicje narzędzi — nie ma argumentów czasu wywołania do
sprawdzenia.1. Kiedy walidować argumenty wywołania narzędzia
Sięgnij po klauzulę argumentu, gdy narzędzie jest bezpieczne ogólnie, ale niebezpieczne w konkretnym kształcie:Destrukcyjne polecenia
Zezwól na
shell.exec, ale odmów, gdy polecenie dopasowuje rm -rf,
mkfs lub dd if=.Promień rażenia na produkcji
Zezwól na
db.query, ale odmów (lub wstrzymaj do zatwierdzenia), gdy cel
połączenia to prod.Wewnętrzne cele
Zezwól na narzędzie fetch, ale odmów, gdy jego argument
url/ip wpada
w zakres RFC-1918 lub IP metadanych chmury.Zbyt duże operacje
Zezwól na narzędzie zbiorcze, ale odmów, gdy argument
limit lub count
przekracza limit numeryczny.2. Kształt zestawu klauzul
args_match_json to string zakodowany w JSON, którego zdekodowana
wartość to obiekt zawierający listę clauses. Każda klauzula to trójka
{ path, op, value }, a wszystkie klauzule łączą się AND — reguła
odpala tylko, gdy każda klauzula jest prawdziwa. Zdekodowana wartość wygląda
tak:
"args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}".
Puste lub nieobecne args_match_json jest trywialnie prawdziwe — reguła
dopasowuje na samym globie nazwy narzędzia, dokładnie jak reguła
tylko-na-nazwie.
3. Operatory
Siedem operatorów tworzy zamknięty słownik. Konsola waliduje operator i kształt jego wartości przy zapisie, więc zniekształcona klauzula nigdy nie persystuje.| Operator | Dopasowuje, gdy |
|---|---|
eq | Równość skalarna (liczby porównywane numerycznie; niezgodność typu to brak dopasowania). |
contains | Podłańcuch — oba operandy muszą być stringami. |
regex | Wzorzec Go RE2 dopasowuje wartość stringową (czas liniowy, bez wstecznych odwołań). |
in | Wartość jest elementem podanej tablicy JSON. |
cidr_match | String IP wpada w podany CIDR. |
gt / lt | Numeryczne większe-niż / mniejsze-niż (stringi nie są koercjonowane). |
4. Składnia ścieżki
path klauzuli to mały podzbiór JSONPath nad obiektem argumentów
narzędzia:
$.foo, $.foo.bar — dostęp do pola
$.foo, $.foo.bar — dostęp do pola
Odczytaj pole obiektu na najwyższym poziomie lub zagnieżdżone po nazwie.
$.foo[0], $.arr[1].k — indeksowanie tablicy
$.foo[0], $.arr[1].k — indeksowanie tablicy
Indeksuj w tablicę, opcjonalnie kontynuując w pola elementu.
$ — cały obiekt argumentów
$ — cały obiekt argumentów
Dopasuj wobec całego bloba argumentów (przydatne z
contains lub regex
do zgrubnego skanu).5. Przepracowany przykład
Pozwalasz swoim agentom uruchamiaćshell.exec swobodnie, ale rekurencyjne
wymuszone usunięcie nigdy nie powinno dotrzeć do shella. Napisz jedną regułę
etapu response, która odmawia shell.exec tylko wtedy, gdy argument
polecenia wygląda destrukcyjnie.
Otwórz edytor reguł
W konsoli otwórz politykę firewalla przypiętą do klucza twojego agenta
(lub domyślną przestrzeni roboczej) i dodaj regułę. Edycja polityk to
akcja Developer+ — Members mogą czytać polityki, ale nie zapisywać
ich.
Dopasuj narzędzie na etapie response
Ustaw etap na
response, a glob narzędzia na shell.exec. Etap
response niesie wybrane przez model argumenty, których klauzula
potrzebuje.Dodaj klauzulę argumentu
Dodaj jedną klauzulę
regex na $.command, potem ustaw werdykt na
deny:args_match_json to string zakodowany w JSON; jego zdekodowana wartość
to obiekt { "clauses": [ … ] } pokazany w §2.Zrób dry-run, zanim na nim polegniesz
Użyj zakładki Test, aby ewaluować
regułę wobec przykładowego wywołania
shell.exec. Zwraca werdykt,
dopasowaną regułę i powód — nic nie jest dyspozytowane i nic
persystowane.shell.exec z "command": "ls -la" przepływa jak wcześniej, podczas
gdy "command": "rm -rf /var" jest odmawiane. Deny na response pozwala
modelowi zobaczyć błąd narzędzia i zareagować — wybrać inne narzędzie,
zapytać użytkownika lub zatrzymać się — zamiast się wysypać.
6. Klauzule fail closed — reguła, nie żądanie
Jeśli klauzula nie może być ewaluowana — ścieżka się nie rozwiązuje, argumenty są zniekształcone albo regex / CIDR jest nieprawidłowy — klauzula ewaluuje się do false, a reguła po prostu nie odpala. Wywołanie spada do następnej reguły lubdefault_verdict polityki. Zepsuta klauzula nigdy
nie auto-odmawia i nigdy nie zakłóca relay.
7. Łączenie klauzul z resztą reguły
Klauzule argumentów stosują się razem ze wszystkim innym, co reguła wyraża — są jednym z kilku połączonych AND warunków:| Połącz z | Efekt |
|---|---|
tool_name_glob | Klauzula działa dopiero, gdy nazwa narzędzia dopasuje — najpierw nazwa, potem argumenty. |
skill_name_glob | Bramkuj argumenty tego samego narzędzia inaczej po skillu właścicielu (np. surowiej na community.*). |
verdict | Łącz klauzule z deny, sanitize, pending_approval lub cap_cost, nie tylko deny. |
| Wiele klauzul | Wszystkie muszą zachodzić — połącz sprawdzenie polecenia regex ze sprawdzeniem środowiska in, aby zacieśnić deny. |
8. Gdzie to pasuje
Reguły firewall
Kompletna referencja reguł — globy, klauzule, sanityzatory, egress i
sekwencje.
Książka kucharska argumentów
Przepisy
args_match_json do skopiowania na typowe niebezpieczne
kształty.Etapy firewalla
Dlaczego klauzule argumentów żyją na
response i mcp, nie inbound.Blokuj narzędzia
Odmów narzędzia wprost, gdy żaden argument nie jest bezpieczny.
