Przejdź do głównej treści
Dodanie narzędzia do listy dozwolonych odpowiada na pytanie, które narzędzie agent może wywołać. Nie odpowiada, z jakimi argumentami. 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.
Reguła wciąż najpierw dopasowuje na nazwie narzędzia; klauzule zacieśniają ją z którego narzędzia do którego wywołania.

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:
{
  "clauses": [
    { "path": "$.command",    "op": "regex",      "value": "rm -rf|drop table" },
    { "path": "$.connection", "op": "in",         "value": ["prod", "replica"] },
    { "path": "$.ip",         "op": "cidr_match", "value": "10.0.0.0/8" }
  ]
}
W ciele reguły pole niesie ten JSON jako pojedynczy escapowany string — np. "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.
OperatorDopasowuje, gdy
eqRówność skalarna (liczby porównywane numerycznie; niezgodność typu to brak dopasowania).
containsPodłańcuch — oba operandy muszą być stringami.
regexWzorzec Go RE2 dopasowuje wartość stringową (czas liniowy, bez wstecznych odwołań).
inWartość jest elementem podanej tablicy JSON.
cidr_matchString IP wpada w podany CIDR.
gt / ltNumeryczne 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:
Odczytaj pole obiektu na najwyższym poziomie lub zagnieżdżone po nazwie.
Indeksuj w tablicę, opcjonalnie kontynuując w pola elementu.
Dopasuj wobec całego bloba argumentów (przydatne z contains lub regex do zgrubnego skanu).
Nie ma symboli wieloznacznych, filtrów, wycinków ani rekurencyjnego zstępowania — gramatyka jest celowo mała, więc dopasowanie pozostaje czasu liniowego i przewidywalne na gorącej ścieżce.

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.
1

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.
2

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.
3

Dodaj klauzulę argumentu

Dodaj jedną klauzulę regex na $.command, potem ustaw werdykt na deny:
{
  "stage": "response",
  "tool_name_glob": "shell.exec",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm\\\\s+-rf|mkfs|dd\\\\s+if=\"}]}"
}
args_match_json to string zakodowany w JSON; jego zdekodowana wartość to obiekt { "clauses": [ … ] } pokazany w §2.
4

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.
Teraz 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ć.
Chcesz pozwolić na wywołanie, ale usunąć wyciekłą wartość zamiast blokować? Zamień werdykt na sanitize. Sanitize nie redaguje tego, co dopasowała klauzula — uruchamia osobny redaktor (nazwane presety jak openai_key, anthropic_key, ssn_us, plus twoje własne niestandardowe regexy) nad stringami argumentów, zastępuje każde trafienie tokenem [redacted:…] i przesyła oczyszczone wywołanie. Klauzula args_match_json wciąż decyduje, czy reguła odpala; sanityzator decyduje, co zostaje wyczyszczone. Zobacz Sanityzacja argumentów. Sanitize redaguje wyłącznie argumenty wywołania narzędzia — nigdy treść, którą narzędzie zwraca.

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 lub default_verdict polityki. Zepsuta klauzula nigdy nie auto-odmawia i nigdy nie zakłóca relay.
Ponieważ klauzula, która nie może się ewaluować, sprawia, że jej reguła nie pasuje, nigdy nie polegaj na klauzuli, by zawiodła w określony sposób. Napisz swoją regułę „wychwyć wszystko niebezpieczne” jako wyraźne deny z własnym globem narzędzia, a klauzul argumentów używaj do zacieśniania pozwolenia — nie jako ostatniej linii obrony.

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 zEfekt
tool_name_globKlauzula działa dopiero, gdy nazwa narzędzia dopasuje — najpierw nazwa, potem argumenty.
skill_name_globBramkuj 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 klauzulWszystkie muszą zachodzić — połącz sprawdzenie polecenia regex ze sprawdzeniem środowiska in, aby zacieśnić deny.
Dla precyzyjnej semantyki werdyktów, którą produkuje każde połączenie, zobacz Werdykty; jak rozwiązuje się wstrzymane wywołanie, zobacz Zatwierdzenia.

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.
Dla szerszego obrazu zobacz Niebezpieczne wywołania narzędzi i Jak OrcaRouter inspekcjonuje.