Skip to main content
When developers want to skip certain form fields in workflows, Cyberdesk provides the __EMPTY__ sentinel value.

Simple Use Case

Problem: Sometimes workflows have optional form fields that should be skipped when no data is provided. Solution: Use __EMPTY__ to skip typing while maintaining workflow structure.

Example

# User provides username but no email
input_values = {"username": "john_doe", "email": "__EMPTY__"}

# Agent behavior:
type_text("john_doe")  # Types the username
type_text("__EMPTY__")  # Skips typing (no email provided)

Automatic __EMPTY__ for Missing Nested Fields

When using structured inputs with nested access, missing fields automatically become __EMPTY__:
# Prompt uses: {patient.middle_name}
# Input only has first and last name:
input_values = {
    "patient": {
        "first_name": "John",
        "last_name": "Doe"
        # middle_name is not provided
    }
}

# Result: {patient.middle_name} → __EMPTY__
This allows workflows to gracefully handle optional nested fields without requiring explicit __EMPTY__ values.
Type errors are different: If you try to access a nested property on a value that isn’t an object or array (e.g., {patient.name.first} when patient.name is a string), the run fails immediately with a clear error. Only truly missing fields become __EMPTY__.

When to Use

  • Optional form fields that might not always be filled
  • Progressive workflows where some data is provided later
  • A/B testing different workflow variants
  • Graceful degradation when inputs are missing
  • Nested optional fields in structured input objects

Best Practice

# ✅ Good: Simple optional step
type_text("__EMPTY__", conditional="input_values['optional_field'] == '__EMPTY__'")

# ❌ Avoid: Complex logic - split workflows instead
This is a simple convenience feature for handling occasional missing data - not for complex workflow logic.