Skip to main content

State Types Comparison

TypePurposeDefaultExample Use Cases
StringText data""Titles, descriptions, status messages, file paths
NumberNumeric values0Counters, IDs, scores, indices
ListOrdered collections[]Search results, file lists, batch items
JSONKey-value pairs{}API responses, config objects, metadata
Quick Guide: Text → String · Counter → Number · Multiple items → List · Structured → JSON

Nodes by Category Comparison

NodeCategoryPurposeLLMExternal ToolKey Feature
LLMInteractionGenerate/analyze text✔️Structured output, tool calling
AgentInteractionSpecialized agents✔️Reusable configurations
ToolkitExecutionDirect ELITEA toolkit call✔️Explicit parameters, fast
MCPExecutionModel Context Protocol tools✔️Remote MCP servers
CodeExecutionPython logicFull programming control
CustomExecutionAdvanced configVariesVariesMaximum flexibility
RouterControl FlowTemplate routingMultiple paths
DecisionControl FlowAI routing✔️LLM decision making
HITLControl FlowHuman approval checkpointApprove / Edit / Reject actions
State ModifierUtilityTransform stateJinja2 templates
PrinterUtilityDisplay output to usersPause & show messages

Control Flow Comparison

FeatureRouterDecisionHITL
MethodTemplate expressionsLLM reasoningHuman decision
PerformanceFastSlower (LLM call)Depends on human response time
Best ForMultiple clear paths, boolean logicContextual decisionsApproval gates, compliance checkpoints
Syntax{% if %}/{% elif %}Natural languageConfigure message + routes
OutputsRoutes + defaultNodes + defaultPer-action routes (approve/edit/reject)
State ChangeNoneNoneedit_state_key updated on Edit
LLM Required✔️
Selection: Multiple paths or boolean logic → Router · AI interpretation → Decision · Human sign-off required → HITL Examples:
# Router - Multiple paths
condition: |
  {% if 'approved' in input|lower %}PublishNode
  {% elif 'rejected' in input|lower %}RejectNode
  {% else %}ReviewNode{% endif %}

# Router - Boolean logic
condition: |
  {% if status == 'approved' and user_type == 'admin' %}AdminPath
  {% else %}RegularPath{% endif %}

# Decision - AI-powered
description: |
  Route based on user intent:
  - SaveNode if wants to save
  - EditNode if wants to edit
  - END if unclear

Execution Nodes Comparison

FeatureToolkitMCPCodeCustom
Tool SelectionManualManualN/AManual
ParametersExplicit mappingExplicit mappingPython codeJSON config
Use LLMDepends
FlexibilityMediumMediumVery HighVery High
PerformanceFastFastFastFast
Best ForELITEA toolkit callsMCP server toolsCustom logicAdvanced integrations
When to Use:
ScenarioUse
Create Jira ticket with known fieldsToolkit
Connect to GitHub MCP serverMCP
Calculate discount with business rulesCode
Execute custom MCP or AgentCustom
Call API with fixed endpointToolkit or Code
Access filesystem via MCPMCP
Data transformation/processingCode

Utility Nodes Comparison

FeatureState ModifierPrinter
PurposeTransform state variablesDisplay output to users
InputState variablesState variables or text
OutputModified stateUser interface message
Template EngineJinja2Fixed/Variable/F-String
Pipeline PauseNoYes (waits for user)
Use CaseCombine/format dataShow progress/results
ExampleAggregate responses, increment counterDisplay report, show status
State Modifier Features:
  • Combine multiple state variables with templates
  • Apply filters: from_json, base64_to_string, split_by_words
  • Clean up temporary variables
  • Format structured output
Printer Features:
  • Display formatted messages during execution
  • Pause pipeline for user review
  • Support Fixed, Variable, and F-String types
  • Resume after user acknowledgment
Selection: Transform/format data → State Modifier · Show output to user → Printer

Input Mapping Types

TypePurposeSyntaxExample
FixedStatic valuetype: fixed, value: "text"bucket_name: "production"
VariableState referencetype: variable, value: var_namequery: user_question
F-StringDynamic templatetype: fstring, value: "text {var}"title: "Report for {project}"
Example:
input_mapping:
  project_type:         # Fixed - unchanging
    type: fixed
    value: "Story"
  project_id:           # Variable - from state
    type: variable
    value: jira_project_id
  title:                # F-String - combine vars
    type: fstring
    value: "[{project_key}] {summary}"

Connection Types Comparison

TypeNode TypesConfigExample
TransitionAll except Router/Decisiontransition: NodeIDtransition: ProcessData
RouterRoutercondition + routes + default_outputMultiple named paths
DecisionDecisiondecision.nodes + default_outputLLM-powered routing
ENDAny nodetransition: ENDPipeline termination
Examples:
# Simple
transition: NextNode

# Router - Multiple paths
condition: "{% if status == 'done' %}Complete{% endif %}"
routes: [Complete, Retry]
default_output: Review

# Router - Boolean
condition: |
  {% if approved %}Publish
  {% else %}Review
  {% endif %}
routes: [Publish, Review]
default_output: Review

# Decision
decision:
  nodes: [Save, Edit, Reject]
  default_output: END

Interaction Nodes Comparison

FeatureLLM NodeAgent Node
ConfigurationFull prompt controlUse agent’s config
PromptsDefine in nodeAgent’s prompts
ToolkitsSelect in nodeAgent’s toolkits
ReusabilityNode-specificReuse across pipelines
FlexibilityVery HighLimited to agent design
SetupMore effortLess effort
Selection: Custom task → LLM · Existing agent → Agent · Reusability needed → Agent

Node Selection Decision Matrix

By Use Case

GoalRecommendedAlternative
Generate text/contentLLM, Agent-
Call ELITEA toolkitToolkitCode
Execute MCP server toolMCPCode
Make decisionRouterDecision
Require human approval or reviewHITL-
Transform stateState ModifierCode
Display output to userPrinter-
Complex routingDecisionRouter
Custom logicCode-

By Complexity

  • Beginner: LLM (simple), Toolkit (clear params), Router (basic), State Modifier (simple), Printer
  • Intermediate: Agent, MCP, Decision
  • Advanced: Code, Custom

Quick Selection

NeedUse
Call GPT-4LLM
Create Jira ticketToolkit
Decide next stepRouter
Require human approvalHITL
Format outputState Modifier
Show progress messagePrinter
Custom calculationCode
Execute MCP toolMCP
Execute agentAgent
Advanced integrationCustom

Best Practices

State Management

✔️ Do: Descriptive names (user_story_title), initialize defaults, correct types, minimal state Avoid: Generic names (data, temp), unused variables, type mismatches

Node Configuration

✔️ Do: Clear IDs (extract_requirements), map required params, include messages for interrupts Avoid: Vague IDs (node1), missing parameters, ignoring validation

Flow Control

✔️ Do: Router for multiple paths and boolean logic, Decision for AI reasoning, provide defaults Avoid: Complex nesting, missing fallbacks, unreachable nodes

Execution

✔️ Do: Toolkit for ELITEA tools, MCP for MCP servers, Code for custom logic, handle errors Avoid: Hardcoded secrets, ignoring errors, wrong node for task

Common Patterns

Extract → Process → Act
- id: GatherInfo      # LLM extracts
- id: ProcessData     # Code processes
- id: TakeAction      # Toolkit executes
Use for: User stories, tickets, documents Conditional Workflow
- id: CheckStatus     # Router
- id: PathA           # Approved
- id: PathB           # Rejected
Use for: Approvals, status routing Data Integration
- id: FetchData       # Toolkit or MCP
- id: Transform       # Code node
- id: Display         # Printer shows result
Use for: API integration, data processing Human-in-Loop
- id: GenerateDraft   # LLM creates content
- id: ReviewDraft     # HITL pauses for human decision
- id: Publish         # Toolkit publishes (on Approve/Edit)
- id: Cancelled       # Printer confirms cancellation (on Reject)
Use for: Content approval, ticket sign-off, compliance checkpoints

Troubleshooting

IssueCauseSolution
State variable not foundNot in state sectionAdd to state:
Node won’t executeMissing parametersCheck Input Mapping
Wrong path takenRouter logic errorReview condition syntax
Toolkit call failsWrong mappingVerify mapping types
MCP connection failsServer not configuredCheck MCP server settings
Printer not showingWrong input typeVerify printer input_mapping
No interrupt outputMissing messagesAdd to output list