Chuyển đến nội dung chính
Allow-list một tool trả lời tool nào mà một agent được phép gọi. Nó không trả lời được với đối số gì. shell.exec ổn cho ls; nó là một thảm họa cho rm -rf /. db.query ổn trên một replica; trên prod nó là một mối nguy. Sự khác biệt nằm trong đối số, và một quy tắc tên-tool không thấy được nó. Mệnh đề argument của Firewall (args_match_json) lấp khoảng trống đó. Chúng kiểm tra các đối số cụ thể mà mô hình chọn cho một cuộc gọi tool và quyết định verdict từ giá trị của chúng — nên bạn có thể cho phép một tool rộng rãi trong khi deny một hình dạng nguy hiểm duy nhất mà nó có thể mang. Trang này là hướng dẫn tập trung để soạn những mệnh đề đó; để biết toàn bộ từ vựng quy tắc, xem Quy tắc Firewall, và để biết mô hình chính sách quanh chúng, xem Firewall.
Giá trị đối số chỉ tồn tại một khi mô hình đã chọn cách gọi một tool, nên các mệnh đề argument thuộc về các stage responsemcp. Trên inbound — nơi agent chỉ quảng bá các định nghĩa tool — không có đối số tại thời điểm gọi để kiểm tra.

1. Khi nào kiểm tra đối số cuộc gọi tool

Dùng một mệnh đề argument bất cứ khi nào một tool an toàn nói chung nhưng nguy hiểm ở một hình dạng cụ thể:

Lệnh phá hủy

Allow shell.exec, nhưng deny khi lệnh khớp rm -rf, mkfs, hoặc dd if=.

Bán kính tác động production

Allow db.query, nhưng deny (hoặc giữ lại chờ phê duyệt) khi đích kết nối là prod.

Đích đến nội bộ

Allow một tool fetch, nhưng deny khi đối số url/ip của nó rơi vào một dải RFC-1918 hoặc IP cloud-metadata.

Thao tác quá khổ

Allow một tool hàng loạt, nhưng deny khi một đối số limit hoặc count vượt một trần số.
Quy tắc vẫn khớp theo tên tool trước; các mệnh đề thu hẹp nó từ tool nào xuống cuộc gọi nào.

2. Hình dạng của một tập mệnh đề

args_match_json là một chuỗi mã hóa JSON mà giá trị giải mã của nó là một đối tượng giữ một danh sách clauses. Mỗi mệnh đề là một bộ ba { path, op, value }, và mọi mệnh đề AND với nhau — quy tắc chỉ kích hoạt khi mọi mệnh đề đều đúng. Khi giải mã, giá trị trông như:
{
  "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" }
  ]
}
Trong một thân quy tắc, trường này mang JSON đó dưới dạng một chuỗi escape duy nhất — vd: "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}". Một args_match_json trống hoặc vắng mặt là đúng một cách rỗng — quy tắc khớp chỉ trên glob tên-tool của nó, đúng như một quy tắc chỉ-tên làm.

3. Toán tử

Bảy toán tử tạo nên từ vựng đóng. Console kiểm tra toán tử và hình dạng giá trị của nó khi bạn lưu, nên một mệnh đề dị dạng không bao giờ được lưu.
Toán tửKhớp khi
eqBằng vô hướng (số được so sánh theo số; sai kiểu là không khớp).
containsChuỗi con — cả hai toán hạng phải là chuỗi.
regexMột mẫu Go RE2 khớp giá trị chuỗi (thời gian tuyến tính, không backreference).
inGiá trị là một phần tử của mảng JSON đã cho.
cidr_matchIP dạng chuỗi rơi vào CIDR đã cho.
gt / ltLớn-hơn / nhỏ-hơn theo số (chuỗi không bị ép kiểu).

4. Cú pháp path

path của một mệnh đề là một tập con JSONPath nhỏ trên đối tượng đối số của tool:
Đọc một trường đối tượng cấp cao nhất hoặc lồng nhau theo tên.
Index vào một mảng, tùy chọn tiếp tục vào các trường của phần tử.
Khớp với toàn bộ blob đối số (hữu ích với contains hoặc regex cho một lần quét thô).
Không có wildcard, filter, slice, hay đệ quy đi xuống — ngữ pháp cố tình nhỏ nên việc so khớp giữ thời gian tuyến tính và đoán được trên hot path.

5. Một ví dụ đã làm

Bạn để các agent của mình chạy shell.exec tự do, nhưng một force-delete đệ quy không bao giờ nên đến được shell. Soạn một quy tắc stage response deny shell.exec chỉ khi đối số command trông có vẻ phá hủy.
1

Mở trình chỉnh sửa quy tắc

Trong console, mở chính sách firewall gắn vào key của agent bạn (hoặc mặc định của workspace) và thêm một quy tắc. Chỉnh sửa chính sách là một hành động Developer+ — Member có thể đọc chính sách nhưng không ghi chúng.
2

Khớp tool trên stage response

Đặt stage thành response và glob tool thành shell.exec. Stage response mang các đối số mà mô hình đã chọn, thứ mà mệnh đề cần.
3

Thêm mệnh đề argument

Thêm một mệnh đề regex trên $.command, rồi đặt verdict thành 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 là một chuỗi mã hóa JSON; giá trị giải mã của nó là đối tượng { "clauses": [ … ] } hiển thị ở §2.
4

Chạy thử nó trước khi phụ thuộc vào nó

Dùng tab Test để đánh giá quy tắc trên một cuộc gọi shell.exec mẫu. Nó trả về verdict, quy tắc đã khớp, và lý do — không gì được dispatch và không gì được lưu.
Giờ shell.exec với "command": "ls -la" chảy qua như trước, trong khi "command": "rm -rf /var" bị deny. Một deny trên response để mô hình thấy một lỗi tool và phản ứng — chọn tool khác, hỏi người dùng, hoặc dừng — thay vì crash.
Muốn cho phép cuộc gọi nhưng bóc một giá trị bị rò rỉ thay vì block? Đổi verdict thành sanitize. Sanitize không che cái mà mệnh đề đã khớp — nó chạy một redactor riêng (các preset có tên như openai_key, anthropic_key, ssn_us, cộng các regex tùy chỉnh của riêng bạn) trên các chuỗi đối số, thay mỗi lần trúng bằng một token [redacted:…], và chuyển tiếp cuộc gọi đã làm sạch. Mệnh đề args_match_json vẫn quyết định liệu quy tắc có kích hoạt; sanitizer quyết định cái gì bị chà sạch. Xem Sanitize đối số. Sanitize chỉ che đối số cuộc gọi tool — không bao giờ che nội dung mà một tool trả về.

6. Mệnh đề fail closed — quy tắc, không phải request

Nếu một mệnh đề không đánh giá được — path không phân giải, đối số dị dạng, hoặc một regex / CIDR không hợp lệ — mệnh đề đánh giá thành false và quy tắc đơn giản không kích hoạt. Cuộc gọi rơi xuống quy tắc kế tiếp hoặc default_verdict của chính sách. Một mệnh đề hỏng không bao giờ tự-deny và không bao giờ làm rối relay.
Vì một mệnh đề không đánh giá được khiến quy tắc của nó không khớp, đừng bao giờ dựa vào một mệnh đề để fail theo một cách cụ thể. Soạn quy tắc “bắt mọi thứ nguy hiểm” của bạn như một deny tường minh với glob tool riêng của nó, và dùng các mệnh đề argument để thu hẹp một cấp phép — không phải làm tuyến phòng thủ cuối cùng.

7. Kết hợp mệnh đề với phần còn lại của một quy tắc

Các mệnh đề argument xếp chồng với mọi thứ khác mà một quy tắc biểu đạt — chúng là một điều kiện được AND trong số nhiều:
Kết hợp vớiHiệu ứng
tool_name_globMệnh đề chỉ chạy một khi tên tool khớp — tên trước, đối số sau.
skill_name_globQuản trị đối số của cùng tool khác nhau theo skill sở hữu (vd: chặt hơn trên community.*).
verdictGhép mệnh đề với deny, sanitize, pending_approval, hoặc cap_cost, không chỉ deny.
Nhiều mệnh đềTất cả phải đúng — kết hợp một kiểm tra command regex với một kiểm tra environment in để thu hẹp một deny thật chặt.
Để biết ngữ nghĩa verdict chính xác mà mỗi cặp tạo ra, xem Verdict; để biết một cuộc gọi được giữ phân giải ra sao, xem Phê duyệt.

8. Cái này khớp vào đâu

Quy tắc Firewall

Tham chiếu quy tắc đầy đủ — glob, mệnh đề, sanitizer, egress, và chuỗi.

Argument cookbook

Các công thức args_match_json copy-paste cho các hình dạng nguy hiểm phổ biến.

Stage Firewall

Tại sao mệnh đề argument sống trên responsemcp, không phải inbound.

Block tool

Deny một tool dứt khoát khi không đối số nào an toàn.
Để có bức tranh rộng hơn, xem Cuộc gọi tool nguy hiểmCách OrcaRouter kiểm tra.