Skip to content

Filter settings reference

Every setting a filter carries, as the API stores it in the filter’s spec and as the console labels it on the filter’s Settings tab. Each saved change is a new version of the filter. For how to change them, and which changes need a fresh approval, see Change a filter’s settings.

A setting the API refuses names the field by its path below, such as operating_point.leak_through_rate. A key Sift does not know is refused, not ignored.

FieldConsole labelType and rangeDefault
nameName (General › Identity)Text, 1 to 200 charactersnone
intentIntent (General, fixed)Text, 1 to 2,000 charactersnone
filter_idnoneflt_ and 4 to 32 lowercase letters or digitsset by Sift
versionnoneWhole number, 1 or moreset by Sift
spec_versionnone2 (1 is read and converted)2

The intent is fixed once the filter leaves authoring, because the gold set was reviewed against it.

Where the filter reads events: one tool of a Kindo integration, called on a schedule. Tool, Watermark field and Id field are fixed after creation.

FieldConsole labelType and rangeDefaultEffect
source.mcp_toolTool (fixed)Text, 1 to 200 charactersnoneThe integration tool Sift calls.
source.paramsTool parametersJSON object{}The query the tool is asked. A different query reads a different stream.
source.watermark_fieldWatermark field (fixed)Dotted path, 1 to 200 charactersnoneThe field that only increases, which the watermark advances on.
source.watermark_paramWatermark parameterText, up to 100 characters, or emptyemptyThe tool parameter that receives the stored watermark. Empty, Sift reads the source unfiltered and discards what it has already seen.
source.cursor_paramCursor parameterText, up to 100 characters, or emptyemptyThe tool parameter that receives the page cursor.
source.id_fieldId field (fixed)Dotted path, 1 to 200 charactersnoneEach event’s stable identifier, so a retried poll cannot start a second run.
source.time_fieldEvent time fieldDotted path, 1 to 200 characters, or emptyemptyWhere the event says when it happened (ISO 8601, or epoch seconds or milliseconds). Orders events within one poll; empty, events are ordered by arrival.
source.poll_interval_sPoll interval30 to 900 seconds60How often Sift reads the source. After a failure the wait doubles from here, up to an hour.

stages holds at most one stage per slot, keyed by slot. Each stage is the recipe in that slot and its setting. A filter needs at least one stage in a slot that can filter (Collapse repeats or Decide). See The pipeline.

Slot keySlotRecipes it takesFiltersTakes candidates
guaranteeAlways escalatedecision_rules, rule_prefilternono
collapseCollapse repeatsdedup_clusteryesno
decideDecidetext_clf_embed_lr, text_clf_setfit, tabular_gbdt, anomaly_novelty, rule_prefilteryesyes
deliverShape deliverydigestnono
FieldConsole labelType and rangeDefaultEffect
stages.<slot>.idthe recipe’s title; Deciding recipe in DecideA recipe id the slot takesnoneThe recipe in the slot.
stages.<slot>.paramsper recipe, belowObjectthe recipe’s defaultsThe recipe’s parameters. Unknown keys are refused.
stages.<slot>.modeStageshadow, activeshadowHow the stage runs; with no stage, the slot is Off. See the table below.
stages.<slot>.candidatesthe slateList; Decide only[]Other recipes measured beside the deciding one. They never filter.
stages.<slot>.originnonecopilot, analyzer, operator, default, or nonenoneWho put the stage there.

The Stage control’s words for mode, per slot:

SlotNo stageshadowactive
Always escalateOffWatchingEscalating
Collapse repeats, DecideOffMeasuringFiltering
Shape deliveryOffMeasuringGrouping

A stage in shadow is scored and recorded and changes nothing. Shape delivery can be active only when target.delivery is event_blob.

FieldType and rangeDefaultEffect
idA Decide recipe, not the deciding one, and not twicenoneThe recipe compared.
paramsObjectthe recipe’s defaultsIts parameters.
enabledtrue, falsetruefalse keeps it on record without measuring it.
origincopilot, analyzer, operator, defaultoperatorWho put it on the slate.

The console draws a control for the parameters that decide what a filter filters and for the lists of event fields. The tables below list those. Each recipe also has further parameters that tune how it learns; they are only in Edit as JSON, their defaults suit most filters, and the API’s schema lists them. See Recipes.

Recipe idConsole titleLabels needed before trainingOperated by
dedup_clusterCollapse repeats0its own similarity rule
rule_prefilterFixed rule0its predicate
decision_rulesPlain-language rules0its rules; never filters
text_clf_setfitText analysis (small sample)50a score threshold
text_clf_embed_lrText analysis300a score threshold
anomaly_noveltyAnomaly detection0an hourly budget (top_n_per_hour)
tabular_gbdtStructured field analysis500a score threshold
digestGroup escalations0its preset; never filters

text_clf_setfit can train only where an operator has set up its optional install (see Install without internet access).

ParamConsole labelType and rangeDefault
text_fieldsFields comparedList of event fields, at least onenone: required
similarity_thresholdSimilarity0.5 to 1.00.92
window_minutesWindow1 to 1,440 minutes60
max_cluster_sizeMax cluster size2 to 10,000 events500

Two events are repeats when their text is at least similarity_threshold alike and the earlier one is inside the window. One group never stands for more than max_cluster_size events.

ParamConsole labelType and rangeDefault
text_fieldsText fieldsList of event fields, at least onenone: required

text_clf_setfit (Text analysis (small sample))

Section titled “text_clf_setfit (Text analysis (small sample))”
ParamConsole labelType and rangeDefault
text_fieldsText fieldsList of event fields, at least onenone: required
ParamConsole labelType and rangeDefault
numeric_fieldsNumeric fieldsList of event fields[]
categorical_fieldsCategorical fieldsList of event fields[]

At least one numeric or categorical field is required.

ParamConsole labelType and rangeDefault
top_n_per_hourEvents an hour1 to 10,00050
text_fieldsText fieldsList of event fields[]
numeric_fieldsNumeric fieldsList of event fields[]

top_n_per_hour escalates the most unusual events each hour and filters the rest. It may not be above operating_point.max_triggers_per_hour, nor above operating_point.agent_budget.runs_per_hour when a budget is set.

ParamConsole labelType and rangeDefault
combinatorMatchall, any (All conditions, Any condition)all
predicatesConditions1 to 50 conditionsnone: required

Each condition:

FieldType and rangeDefault
field_pathDotted path, 1 to 200 charactersnone
opSee belownone
valueText, number, true/false, or a list of text or numbers; omitted for existsnone (required unless op is exists)
opConsole words
eqequals
nedoes not equal
gtgreater than
gteat least
ltless than
lteat most
inis one of
not_inis not one of
containscontains
matchesmatches pattern
existsexists

The Always escalate stage’s recipe. It needs at least one rule of either kind, and every rule’s key must be unique across both lists. Plain-language rules need the decision model.

ParamConsole labelType and rangeDefault
rulesPlain-language rulesUp to 10 rules[]
field_rulesField rulesUp to 10 rules[]
max_rescues_per_hourMax rescues per hour1 to 200 events20

A plain-language rule:

FieldConsole labelType and rangeDefault
keyLowercase letters, digits and _, starting with a letter or digit, up to 40 charactersnone
nameName1 to 80 charactersnone
questionQuestion1 to 300 charactersnone
reachReachnarrow (0.1% of filtered events), normal (0.5%), wide (2%)normal

A field rule has key and name as above, plus combinator (Match) and predicates (1 to 50 conditions), as in rule_prefilter.

The Shape delivery stage’s recipe. It never filters. Choosing a named preset fills in its four bundled settings; a different value for any of them is refused unless preset is custom, which must set all four. The four bundled settings and the last three below are under Advanced settings.

ParamConsole labelType and rangeDefault
presetGroupingno_delay, storms_only, short_wait, not_urgent, customno_delay
wait_sWait0 to 3,600 secondsfrom the preset
immediate_per_hourRuns per hour before grouping0 to 10,000from the preset
budget_scopeBudget countsfilter (Whole filter), group (Each group)from the preset
max_eventsMax events per run2 to 50from the preset
group_byGroup byUp to 3 event fields[]
max_charsMax characters per run2,000 to 32,00032000
split_rateSplit rate0.005 to 0.050.02
PresetConsole labelwait_simmediate_per_hourbudget_scopemax_events
no_delayNo added delay00filter25
storms_onlyStorms only30030filter25
short_waitShort wait3000filter25
not_urgentNot urgent9000filter10
customCustomset by youset by youset by youset by you

wait_s 0 releases a group with the poll that decided it. Below immediate_per_hour runs in the past hour, an escalation goes singly; 0 always groups. split_rate is the share of events that would be grouped and are sent singly instead, so grouping’s effect on verdicts can be measured. A run’s characters are also capped by SIFT_MAX_TRIGGER_INPUT_CHARS.

The agent the filter sends to, and how. See The paired agent and the agent contract.

FieldConsole labelType and rangeDefaultEffect
target.agent_idAgent id (Delivery)Text, 1 to 200 characters, or nonenoneThe Kindo agent’s id. None while the paired agent does not exist yet; nothing is sent until it is set.
target.deliverynoneevent_blob, named_inputsnamed_inputsevent_blob sends the whole event as one input, sift_event, to an agent generated for the filter. named_inputs fills an existing agent’s own inputs from input_mapping.
target.input_mappingnoneObject: agent input name to template{}Only with named_inputs, and then required. Each value may use {{event.<field>}} and {{sift.delivery}}, nothing else. The keys must match the agent’s declared inputs exactly.
target.capacity_runs_per_hourThe agent can take (Delivery › Agent load)1 to 1,000,000, or nonenoneHow many runs an hour the agent can take. Sift compares a stream with it to decide which protections to suggest. It limits nothing by itself, and changing it never needs an approval. None uses the deployment’s default, SIFT_AGENT_DEFAULT_RUNS_PER_HOUR.

named_inputs needs an agent_id; event_blob must have an empty input_mapping.

FieldConsole labelType and rangeDefaultEffect
operating_point.modenoneshadow, activeshadowWhether the filter is filtering. Set by approval and the lifecycle, not typed.
operating_point.thresholdThreshold (Delivery, fixed)0.0 to 1.00.0The score at or above which Decide sends an event. Must be 0.0 in shadow, and 0.0 unless the deciding recipe is operated by a score threshold. Set only by approving one on the threshold screen.
operating_point.leak_through_rateLeak-through (%) (Delivery › Volume)0.01 to 0.05 (1% to 5%)0.03 (3%)The share of events the filter would filter that are sent anyway, to measure what the filter misses. Never zero.
operating_point.max_triggers_per_hourMax escalations per hour (Delivery › Volume)1 to 100,000200The trigger ceiling: escalations counted in an hour while the filter is active. A grouped run counts once per event in it.
operating_point.on_alarmOn alarm (General › On alarm)fall_back (Stop filtering), keep_filtering (Keep filtering), loosen (Filter at a safer point)fall_backWhat an active filter does when a drift alarm fires or it passes the trigger ceiling: return to shadow; keep filtering and raise an alert; or, on drift, move to the safer point (on the ceiling loosen keeps filtering). loosen needs a recipe operated by a score threshold.
operating_point.safer_thresholdnone (set on the threshold screen)0.0 to 1.0, below threshold, or emptyemptyThe point loosen moves to on a drift alarm, approved with the threshold. Empty under loosen until a threshold is approved, and empty again once Sift has moved the filter there. Lowering it is free; raising it needs an approval or a re-affirmation.
operating_point.agent_budgetAgent budget (Delivery › Agent load): Off, Hold in a queue, Group the overflow, Record only, Customan object, or nonenoneThe most agent runs this filter starts in a rolling hour, in every state. None is no budget. What it has no room for is never filtered: see The agent budget. Setting one, or keeping more back, needs an approval or a re-affirmation on an active filter; clearing it is free.
operating_point.agent_budget.runs_per_hourRuns an hour1 to 100,000requiredThe budget. A run of one event and a grouped run each count as one; a re-send counts. It must cover the Always escalate stage’s max_rescues_per_hour plus the measuring sample’s share of the budget (the larger of leak_through_rate and shadow_sample.share), since both are sent before anything else.
operating_point.agent_budget.overflowOverflow (under Custom)hold (Hold in a queue), group (Group the overflow), record_only (Record only)holdWhat happens to an escalation over the budget: it waits in a queue, goes in a grouped run, or is recorded and never sent. group needs whole events to an agent Sift generated at contract 4 or later.
operating_point.agent_budget.queue_max_eventsQueue depth (under Custom)1 to 1,000,00024 hours of the budget, at most 1,000,000How many escalations may wait. Past it, the lowest-priority one is pushed out.
operating_point.agent_budget.queue_max_age_sLongest wait (under Custom)900 to 604,800 seconds86400 (a day)How long an escalation may wait before it ages out unsent.
operating_point.agent_budget.pacePace (under Custom)smooth (Smooth), burst (Burst)smoothsmooth admits at most a twelfth of the budget per five minutes once half the hour’s budget is used. burst admits until it is spent.
operating_point.agent_budget.warn_atWarn at (under Custom)0.5 to 0.950.8The share of the budget, or of the queue’s depth or wait, at which Sift warns.
operating_point.shadow_sampleIn shadow, send the agent (Delivery › In shadow): Send everything, A tenth, One in twenty, One in fifty, Customan object, or nonenoneSampled shadow: in shadow and proposed, send the agent a sample of the stream instead of every event. None sends every event. An active filter ignores it. Changing it never needs an approval.
operating_point.shadow_sample.shareShare sent (under Custom)0.005 to 0.5requiredThe expected share of events sent to the agent.
operating_point.shadow_sample.guidedDraw (under Custom): Guided, Uniformtrue, falsetrueSend events the model scores higher more often. false gives every event the same chance.
operating_point.shadow_sample.floorFloor (under Custom)above 0, up to 10.3Under guidance, no event’s chance falls below floor × share.
operating_point.shadow_sample.min_positivesPositives before a proposal (under Custom)20 to 1,000,00050Training proposes no threshold until the sample holds this many events the agent called actionable.

What a trained model must show on the holdout before a threshold can be proposed. See Operating point and approval.

FieldConsole labelType and rangeDefaultEffect
acceptance.posturePosture (General › Policy)maximise_savings (Maximise savings), balanced (Balanced), catch_everything (Catch everything), custom (Custom), or nonenoneHow many extra agent runs you will pay to catch one more actionable event. Picks the proposed point on the frontier.
acceptance.catch_cost_multipleCatch-cost multiple (shown with Custom)0 or more, or noneset by the postureThe posture as a multiple of what one catch costs on this stream: maximise_savings 0.5, balanced 2.0, catch_everything 10,000. Required with custom; with a named posture it must match.
acceptance.min_labelsMin labels to train (General › Policy)0 to 1,000,000, not below the deciding recipe’s own minimum400The label floor.
acceptance.holdoutHoldout (General › Policy)temporal_last_20pct (Last 20%), temporal_last_30pct (Last 30%)temporal_last_20pctThe newest share of labels kept out of training to measure the model.
acceptance.metricnonerecall_at_thresholdrecall_at_thresholdThe measure a point is judged on.
acceptance.min_valuenoneabove 0, up to 1.00.99The recall bar, used only when posture is none (a filter saved before postures).

Because tabular_gbdt needs 500 labels, a filter deciding with it must raise acceptance.min_labels to at least 500.

The alarm levels Sift watches a running filter against, and when it retrains. Collapse alarms appear only on a filter with a Collapse repeats stage. See How Sift measures a filter.

FieldConsole labelType and rangeDefaultEffect
drift.firing_rate_alarm_pctEscalation change (%) (General › Monitoring)1 to 100 (percent)50A relative change in the share of events escalated, against the window before’s share, that raises a drift alarm.
drift.score_shift_alarm_sdScore-shift alarm (General › Monitoring)above 0, up to 50.15How far the deciding model’s average score may move against the window before, relative to how spread out that window’s scores were. Lower is more sensitive.
drift.feature_psi_alarmFeature drift alarm (General › Monitoring)0.05 to 1.00.25How much the values of the fields the recipe reads may change, week over week, before a drift alarm (0.25 is a large change). The field that changed most is the one judged. Lower is more sensitive.
drift.retrain_scheduleRetrain schedule (General › Monitoring)daily, weekly, monthly, neverweeklyHow often Sift retrains the filter on its own.
drift.collapse_compression_shiftCompression shift (General › Collapse alarms)0.05 to 0.50.15How far the share of events Collapse folds away may move between the last day and the week before, in absolute points, before it warns.
drift.collapse_runaway_shareRunaway share (General › Collapse alarms)0.2 to 0.90.5The share of a day’s events one group may hold before it is read as a false merge.