Skip to main content
A filter decides whether an incoming webhook event starts an Agent run. For a supported integration, the builder can help generate a filter from a plain-language description. For a custom webhook, write an expression using fields in the payload sent by that source.

Expression format

Filters use Lisp-style S-expressions: (operator argument ...). An expression evaluates to true (process the event) or false (ignore it). Put strings in double quotes; write numbers and booleans without quotes. Lists use parentheses. Refer to fields by dot-separated paths, such as "action", "issue.state", or "pull_request.head.ref". Use * for fields inside objects in an array, for example "tags.*.name". Field paths are case-sensitive and must match the JSON payload.

Operators

To test “not equal,” use (not (eq "field" value)). starts-with applies to strings; numeric operators require numeric values.

Test a filter

Test with sample payloads that should match and should be rejected. Check field names, types, capitalization, nested paths, and array contents. Comparisons are type-safe: incompatible types evaluate to false. Missing or null fields evaluate to false for every operation except (not (exists "field")), which evaluates to true. Empty lists passed to has-all or has-any evaluate to false. Whitespace and line breaks do not affect an expression.