Controls
A Control is a single rule that defines what to check and what to do when a condition is met.selector with an evaluator. Composite conditions can use and, or, and not to combine multiple leaf checks.
Scope
Scope defines when a control runs by filtering which steps are evaluated. Fields:-
step_types: Step types to target (e.g.,["tool", "llm"]). If null, applies to all types. -
step_names: Exact step names to target (e.g.,["search_db", "send_email"]). -
step_name_regex: Regex pattern to match step names (e.g.,"^db_.*"). -
stages: When to evaluate —["pre", "post"].-
pre: Check before execution (block bad inputs, prevent prompt injection) -
post: Check after execution (filter bad outputs, redact PII)
-
Selectors
A Selector defines what data to extract from the payload for evaluation.| Path | Description | Example Use |
|---|---|---|
input | Step input (tool args or LLM input) | Check for prompt injection |
output | Step output | Check for PII leakage |
input.query | Tool input field | Block SQL injection |
name | Step name (tool name or model/chain id) | Restrict step usage |
context.user_id | Context field | User-based rules |
* | Entire step | Full payload analysis |
Evaluators
An Evaluator receives the selected data and checks it against configured rules.Actions
An Action defines what happens when a control matches.Priority Semantics
-
Deny wins — if any
denycontrol matches, execution is blocked. -
Steer second — if any
steercontrol matches (and no deny), steering context is returned. - Allow/warn/log — observability actions that do not block execution.