GuardResult
Return value of client.guard().
python
@dataclass
class GuardResult:
status: str
decision: dict[str, Any]
executed: bool
result: Any = NoneFields
| Field | Type | Description |
|---|---|---|
status | str | "allow" | "allow_with_modifications" | "require_human_review" | "deny" |
decision | dict | Raw decision payload from the API, including decision_id, approval_id, reasons, effective_policy |
executed | bool | True if execute() was called (status was allow or allow_with_modifications) |
result | Any | Return value of execute(), or None if not executed |
Properties
python
result.requires_human_review # True when status == "require_human_review"
result.denied # True when status == "deny"decision fields
python
result.decision["decision_id"] # str — unique ID for this decision
result.decision["approval_id"] # str | None — set when requires_human_review
result.decision["status"] # same as result.status
result.decision["reasons"] # list[{"code": str, "message": str}]
result.decision["effective_policy"]["allowed_tools"] # list[str]
result.decision["effective_policy"]["allowed_models"] # list[str]
result.decision["effective_policy"]["max_tokens"] # intExample
python
result = client.guard(
action="delete_record",
execute=lambda: db.delete(record_id),
tools=["delete_record"],
)
match result.status:
case "allow" | "allow_with_modifications":
print("Executed:", result.result)
case "require_human_review":
approval_id = result.decision.get("approval_id")
# poll get_approval_status(approval_id=approval_id)
case "deny":
reason = result.decision["reasons"][0]["message"]
raise PermissionError(f"Blocked: {reason}")