Skip to content

GuardResult

Return value of client.guard().

python
@dataclass
class GuardResult:
    status: str
    decision: dict[str, Any]
    executed: bool
    result: Any = None

Fields

FieldTypeDescription
statusstr"allow" | "allow_with_modifications" | "require_human_review" | "deny"
decisiondictRaw decision payload from the API, including decision_id, approval_id, reasons, effective_policy
executedboolTrue if execute() was called (status was allow or allow_with_modifications)
resultAnyReturn 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"]      # int

Example

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}")

Apache 2.0 License