Skip to main content

Policies & Human Review

What are policies?

Policies are rules that automatically evaluate every trace. Each policy specifies conditions and an outcome:

OutcomeBehaviorTrace status
BlockHard stop. Agent action should be stopped.blocked
FlagSoft match. Routes to Review Queue.flagged
ApproveExplicitly approve matching traces, skipping other rules.approved

Policy evaluation

All active policies are evaluated for every trace. The most restrictive outcome wins:

block > flag > approve

If two policies match — one flagging and one approving — the flag wins.

Policy templates

Adjudon provides pre-built policy templates for common scenarios. Access them via the dashboard or the API:

GET /api/v1/policies/templates
Authorization: Bearer <jwt>

Templates cover common patterns: PII in outputs, harmful content, low-confidence decisions, off-topic responses, and more.

Creating custom policies

Via the dashboard: Dashboard → Policies → Create Policy

Via the API:

curl -X POST https://api.adjudon.com/api/v1/policies \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <jwt>" \
-d '{
"name": "Block PII in outputs",
"outcome": "block",
"conditions": [...]
}'

Review Queue

Flagged traces appear in Dashboard → Reviews. The Review Queue is Adjudon's implementation of EU AI Act Article 14 (Human Oversight) — every flagged decision requires human sign-off.

Reviewers can take the following actions:

ActionDescription
ApproveMark the decision as acceptable
RejectMark as a policy violation
EscalateForward to a senior reviewer
AssignAssign to a specific team member
Bulk decisionApprove or reject multiple items at once

Webhook notifications

Configure a webhook to receive real-time notifications when review decisions are made:

curl -X POST https://api.adjudon.com/api/v1/webhooks \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <jwt>" \
-d '{
"url": "https://your-server.com/adjudon-webhook",
"events": ["review.completed", "trace.blocked"]
}'

See Webhooks for payload formats and signature verification.

Handling blocked decisions in code

When a trace is blocked, the API returns 403. SDKs with raise_on_block=True raise AdjudonBlockedException:

from adjudon import Adjudon
from adjudon.exceptions import AdjudonBlockedException

client = Adjudon(api_key="adj_agent_abc123...", agent_id="my-agent", fail_mode="closed")

try:
result = client.trace(
input_context={"prompt": user_input},
output_decision={"action": "llm_response", "text": llm_response},
)
except AdjudonBlockedException as e:
# Do not send the response to the user
return "I cannot help with that request."

With fail_mode="open" (default), blocked decisions still raise AdjudonBlockedException with raise_on_block=True — but infrastructure errors (network, timeout) do not block your agent.