# Agentic Workflow Conditions

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects&#x20;

**Purpose:** Defines what <code class="expression">space.vars.condition\_steps</code> are, explains how they evaluate criteria and route execution, and surfaces the behavioral caveats and limitations users must understand to design conditional logic that is reliable, predictable, and debuggable.
{% endhint %}

## Overview

<code class="expression">space.vars.condition\_steps</code> are the primary mechanism for introducing decision logic into an <code class="expression">space.vars.automation</code>. Every <code class="expression">space.vars.condition\_step</code> evaluates one or more criteria and routes execution down one of exactly two paths, yes or no, based on the result.&#x20;

<div data-with-frame="true"><figure><img src="/files/7WHh73oErE1Vy4LjBkYy" alt="" width="291"><figcaption></figcaption></figure></div>

There is no neutral outcome. Understanding how <code class="expression">space.vars.condition\_steps</code> evaluate, and where they can fail, is essential for designing <code class="expression">space.vars.automations</code> that behave predictably under real-world data conditions.

***

## What Are Conditions?

A <code class="expression">space.vars.condition\_step</code> is a filter that runs inside an <code class="expression">space.vars.automation</code> execution. It evaluates criteria against the context <code class="expression">space.vars.entity</code>, <code class="expression">space.vars.automation</code> variables, or both, and routes execution down one of exactly two paths based on the result. <code class="expression">space.vars.condition\_steps</code> do not take action, they make decisions that determine what happens next. Here's what they do:

* **Acts as a filter step that evaluates criteria and routes execution:** <code class="expression">space.vars.condition\_steps</code> evaluate one or more criteria against available data and route execution down one of two paths based on whether those criteria are met.
* **Has a yes path or a no path:** Every <code class="expression">space.vars.condition\_step</code> has exactly two output paths: yes and no. There is no neutral outcome, and no way for a <code class="expression">space.vars.condition\_step</code> to pass through without routing, unless you intentionally skip the <code class="expression">space.vars.condition\_step</code>. Both paths must be accounted for in <code class="expression">space.vars.automation</code> design, even if one path leads to no further steps, it must exist.
* **Creates an outcome that is visible in the execution history:** Once a <code class="expression">space.vars.condition\_step</code> executes, the path taken is recorded in the execution history for that step. This makes <code class="expression">space.vars.condition\_steps</code> a useful diagnostic tool when tracing why an <code class="expression">space.vars.automation</code> took a particular route.

***

## Condition Types

<code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code> support two <code class="expression">space.vars.condition\_step</code> types. The type you choose determines how the yes/no decision is made, either through a deterministic filter evaluated against <code class="expression">space.vars.entity</code> data and variables, or through an LLM that interprets unstructured content.

### Filter Condition

A Filter <code class="expression">space.vars.condition\_step</code> evaluates one or more filter criteria against the context <code class="expression">space.vars.entity</code> or variable values and routes execution based on whether the criteria are met. Three filter options are available:

* **Is In Group / Is Not In Group:** Routes execution based on whether the context <code class="expression">space.vars.entity</code> is a member of a saved Group (or not). This is useful when you have pre-defined segments you want to reuse across <code class="expression">space.vars.automations</code> without rebuilding the filter logic each time.
* **Custom Filters:** Evaluates one or more criteria built directly in the <code class="expression">space.vars.condition\_step</code> step. Filters can target any field on the context <code class="expression">space.vars.entity</code>, values in <code class="expression">space.vars.automation</code> variables, or both, and can be combined using AND and OR logic to express more complex criteria.

<div data-with-frame="true"><figure><img src="/files/3XwlJMYuJQa8fTl0tJDU" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note:** <code class="expression">space.vars.condition\_steps</code> that evaluate against a variable carry additional risk if the variable is blank at evaluation time. The result may be unpredictable depending on the operator used. See Blank Variable Risk in the [Behavioral Caveats](#behavioral-caveats-and-limitations) section below.
{% endhint %}

### LLM Decision Step

The LLM Decision Step is a <code class="expression">space.vars.condition\_step</code> variant that delegates the yes/no routing decision to an AI language model rather than a deterministic filter.

<div data-with-frame="true"><figure><img src="/files/ifLaPkpqEy75tHEtCpTs" alt="" width="253"><figcaption></figcaption></figure></div>

The LLM Decision Step routes execution based on a yes or no answer from a language model. You provide a prompt, the model evaluates it, and execution follows the path that matches the model's response. This is useful when the decision depends on something a filter cannot evaluate, such as the intent behind a free-text response, the sentiment of an email, or whether a description meets a qualitative standard.

<div data-with-frame="true"><figure><img src="/files/RbGMCzNrpcZzoPxQ1dBG" alt="" width="563"><figcaption></figcaption></figure></div>

The LLM Decision Step is not appropriate for deterministic logic where the correct answer can always be computed. For example, date comparisons, numeric evaluations, or field equality checks. For those cases, use a standard condition. Delegating deterministic logic to an LLM introduces unnecessary variance and the possibility of incorrect routing.

For guidance on good and poor LLM condition use cases, see AI Condition Steps in [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps.md).

***

## How Conditions Evaluate

When a <code class="expression">space.vars.condition\_step</code> executes, it evaluates criteria against the data available at that point in the execution sequence. The following describes what data is accessible, what comparison modes are supported, and how filters can be structured and validated:

* **Context Record and variable scope:** <code class="expression">space.vars.condition\_steps</code> evaluate against field values on the context <code class="expression">space.vars.entity</code> and its related data, and any <code class="expression">space.vars.automation</code> variables defined on the <code class="expression">space.vars.automation</code>. Both the context <code class="expression">space.vars.entity</code> and all variables are available to a condition step at the time it executes.
* **Comparison modes:** Field-to-field comparisons evaluate one field against another field on the <code class="expression">space.vars.entity</code>. Field-to-variable comparisons evaluate a field against a value stored in an <code class="expression">space.vars.automation</code> variable. Field-to-value comparisons evaluate a field against a hardcoded static value. The right comparison mode depends on whether the value you are comparing against is fixed, dynamic, or derived from another part of the record.
* **Supported operators:** <code class="expression">space.vars.condition\_step</code> filters support a range of comparison operators including equals, does not equal, contains, does not contain, is blank, is not blank, and others. Available operators depend on the field type being evaluated. Operator selection also affects how blank values are handled at runtime. For more information, see [Behavioral Caveats](#behavioral-caveats-and-limitations).
* **Filter groups and reusable filters:** <code class="expression">space.vars.condition\_steps</code> can be built using filter groups, which are logical groupings of criteria that combine AND and OR logic to express more complex evaluation rules. Reusable filters defined elsewhere in the platform can also be referenced within a <code class="expression">space.vars.condition\_step</code>. When doing so, audit those filters for relative or user-context criteria that do not apply at <code class="expression">space.vars.automation</code> runtime. For more information about Relative and Running User Filters, see [Behavioral Caveats](#behavioral-caveats-and-limitations).
* **Filter group result preview:** When configuring a <code class="expression">space.vars.condition\_step</code>, you can view how many <code class="expression">space.vars.entities</code> currently match the criteria of a filter group before activating the <code class="expression">space.vars.automation</code>. Within the selected groups, select the filter group name to be taken to the matching <code class="expression">space.vars.entities</code>.&#x20;

{% hint style="info" %}
**Note:** Your ability to view Filter Group <code class="expression">space.vars.entities</code> may depend on your permissions. For more information, see Agentic Workflow Permissions **(Topic Coming Soon)**.
{% endhint %}

***

## Behavioral Caveats and Limitations

<code class="expression">space.vars.condition\_steps</code> are straightforward to configure but carry several runtime behaviors that can produce unexpected results if not understood in advance. The following caveats apply to both standard conditions and, where noted, Goals.

### Variable and Filter Behavior

* **Blank variable risk:** If a <code class="expression">space.vars.condition\_step</code> evaluates a variable that is blank at the time of evaluation, the result may be unpredictable depending on the operator used. Some operators handle blank values in ways that are not immediately obvious. A "does not equal" comparison against a blank variable, for example, may pass unexpectedly, routing execution down the yes path when the intent was to filter the <code class="expression">space.vars.entity</code> out. This is one of the most common sources of unexpected <code class="expression">space.vars.condition\_step</code> behavior in production <code class="expression">space.vars.automations</code>.
* **The "Consider empty value an error" toggle:** Variables include a configuration toggle called **Consider empty value an error**. When enabled, the variable errors immediately if assigned a blank value rather than silently storing it, preventing a blank variable from reaching a <code class="expression">space.vars.condition\_step</code> undetected. This is the recommended mitigation for any variable used in a <code class="expression">space.vars.condition\_step</code> where a blank value would produce incorrect routing. For full details, see Agentic Workflow Variables **(Coming Soon)**.
* **Relative and running user filters are silently ignored:** Some filter criteria are relative to the person who is currently logged in and running an action. For example, "owner is me" resolves to whichever user is active at that moment. These are called running user or relative filters. Because <code class="expression">space.vars.automations</code> execute in the <code class="expression">space.vars.automation</code> context rather than in the context of any specific user, these filters have no user to resolve to at runtime and are silently ignored. The <code class="expression">space.vars.automation</code> proceeds as if that criterion does not exist. Before using a reusable filter group in an <code class="expression">space.vars.automation</code> condition, audit it for relative or running user criteria and remove or replace them.
* **"My Records" filter behavior:** Filters that use "My Records" do not behave as expected in <code class="expression">space.vars.automation</code> conditions. Because <code class="expression">space.vars.automations</code> do not run in user context, "My Records" has no user to resolve to at runtime and is silently ignored. If a <code class="expression">space.vars.condition\_step</code> relies on ownership or association logic, use an explicit field comparison instead. For example, comparing an owner field directly against a specific team member value or an initialized variable.

### Error Behavior

* **Conditions do not support error handling:** <code class="expression">space.vars.condition\_steps</code> do not have configurable error handling. There is no retry behavior and no error path. If a <code class="expression">space.vars.condition\_step</code> encounters a problem it cannot evaluate through, execution pauses rather than continuing down either path.
* **Pause on error requires manual path selection:** If a <code class="expression">space.vars.condition\_step</code> errors, the execution is paused on that step. When manually restarted, the execution will attempt to re-run the <code class="expression">space.vars.condition\_step</code>. If the user chooses to skip the <code class="expression">space.vars.condition\_step</code> instead, they must select which path, yes or no, the execution should continue down. Skipping a paused <code class="expression">space.vars.condition\_step</code> requires a deliberate path selection and is the only way to bypass a <code class="expression">space.vars.condition\_step</code> that cannot be evaluated.
* **Goals share this behavior:** Goals share the same pause-and-select-path behavior when they encounter an error. A path must be manually selected before the <code class="expression">space.vars.automation</code> can continue. For full detail, see Agentic Workflow Goals **(Topic Coming Soon)**.
* **LLM Decision Step confidence threshold:** The LLM Decision Step includes a confidence threshold setting that determines how the step handles low-confidence responses from the model. For full details on how this setting works and how to configure it, see LLM/AI Action Steps **(Coming Soon)**.

***

## What's Next

With a clear understanding of how <code class="expression">space.vars.condition\_steps</code> evaluate criteria and route execution, the next step is to learn about Actions, which are the units of work that produce outcomes within an <code class="expression">space.vars.automation</code>. Together, <code class="expression">space.vars.condition\_steps</code> and Actions form the core decision and execution layer of any <code class="expression">space.vars.automation</code>'s logic.

Continue to Agentic Workflow Actions **(Topic Coming Soon)** to learn about every supported action type and how each behaves.

<details>

<summary>Related Topics</summary>

* [Agentic Workflow Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers.md)
* Agentic Workflow Actions **(Topic Coming Soon)**
* Agentic Workflow Variables **(Topic Coming Soon)**
* Agentic Workflow Goals **(Topic Coming Soon)**
* [Agentic Workflow Code Steps](https://developer.kizen.com/docs/concepts/automations/automation-code-steps)

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-conditions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
