Node Reference
Complete documentation for all available nodes in Agents
Nodes are the building blocks of workflows. Each node type performs a specific function, from triggering workflows to processing data to taking actions in external systems.
Node Categories
Agents provides 25+ nodes organized into five categories:
Triggers
Nodes that start workflow execution.
| Node | Description |
|---|---|
| Event Trigger | Start workflow on system events (meeting ended, etc.) |
| Scheduled Trigger | Start workflow on cron schedule |
Loaders
Nodes that fetch data from external sources.
| Node | Description |
|---|---|
| Load Meeting | Fetch meeting details, attendees, and transcript |
AI
Nodes that process data with artificial intelligence.
| Node | Description |
|---|---|
| AI Prompt | Generate text with a configured prompt |
| AI Agent | Agentic AI with tool access for complex tasks |
Actions
Nodes that take actions in external systems.
| Node | Description |
|---|---|
| Slack Post | Send messages to Slack channels |
| Email Send | Send emails to recipients |
| SMS Send | Send text messages via SMS |
| Create HubSpot Task | Create tasks in HubSpot CRM |
| Create Salesforce Task | Create tasks in Salesforce |
| CRM Update Opportunity | Update deal/opportunity in CRM |
Control Flow
Nodes that control execution flow and data routing.
| Node | Description |
|---|---|
| If | Conditional branching based on expressions |
| Zip | Merge multiple input streams |
| Broadcast | Attach shared data to all items |
| Select Many | Flatten arrays into individual items |
| Wait | Pause execution for a duration |
| Sink | Terminate a workflow branch |
Node Anatomy
Every node follows a consistent structure:
┌─────────────────────────────────────┐
│ Node Type Icon │
│ Node Name │
├─────────────────────────────────────┤
│ ○ Input Port(s) │ ← Receive data from upstream
├─────────────────────────────────────┤
│ Configuration │ ← Parameters you configure
│ • param1 │
│ • param2 │
├─────────────────────────────────────┤
│ ● Success Output │ ← Send data downstream
│ ● Error Output (optional) │ ← Route errors separately
└─────────────────────────────────────┘
Ports
Input Ports:
- Receive data from connected upstream nodes
- Most nodes have 1 input port
- Merge nodes (Zip, Broadcast) have 2-4 input ports
- Trigger nodes have 0 input ports (they start the flow)
Output Ports:
- Send data to connected downstream nodes
- Success channel: Normal output when node completes successfully
- Error channel: Output when node encounters recoverable errors
Node ID Format
Nodes have internal IDs following this pattern:
<family>.<mode>.in<N>.success<K>.error<M>
Example: ds.slackPost.perItem.in1.success1.error1
ds.slackPost: Slack Post node familyperItem: Processes items individuallyin1: 1 input portsuccess1: 1 success outputerror1: 1 error output
Execution Modes
Nodes operate in one of two execution modes:
Per-Item Mode
Processes each input item individually. If 5 items arrive, the node runs 5 times.
Use case: Sending individual messages, processing records one at a time
Example: Slack Post sends one message per input item
Batch Mode
Processes all input items together as a collection.
Use case: Aggregating data, merging streams, operations that need all items at once
Example: Zip combines multiple streams into a single output
Configuration Parameters
Node parameters can be configured in two ways:
CEL Expressions
Dynamic values computed at runtime using Common Expression Language:
trigger.meetingPlanId
json.score > 0.8
json.attendees[0].email
For static literal values, use CEL string/number literals:
"#sales-updates"
42
true
Liquid Templates
Text with variable substitution for message content:
Hello {{ json.name }},
Your meeting "{{ json.meeting.title }}" has ended.
Timeouts and Retries
Default Timeouts
| Node Category | Default Timeout |
|---|---|
| Standard nodes | 30 seconds |
| AI nodes | 120 seconds |
Retry Behavior
Most nodes retry on failure:
- Max attempts: 3 (default)
- Strategy: Exponential backoff with jitter
- Initial backoff: 1 second
- Max backoff: 30 seconds
Nodes marked as side-effecting (Slack, Email, CRM) use idempotency keys to prevent duplicate actions on retry.
Finding the Right Node
"I want to start a workflow when..."
→ Use a Trigger node
| Scenario | Node |
|---|---|
| A meeting ends | Event Trigger with MEETING_ENDED |
| A scheduled time arrives | Scheduled Trigger |
| I manually run it | Event Trigger with MANUAL |
"I want to fetch data from..."
→ Use a Loader node
| Scenario | Node |
|---|---|
| A meeting (attendees, transcript) | Load Meeting |
"I want to use AI to..."
→ Use an AI node
"I want to send a message via..."
→ Use an Action node
| Scenario | Node |
|---|---|
| Slack | Slack Post |
| Email Send | |
| SMS | SMS Send |
"I want to update my CRM..."
→ Use a CRM Action node
| Scenario | Node |
|---|---|
| Create a HubSpot task | Create HubSpot Task |
| Create a Salesforce task | Create Salesforce Task |
| Update a deal/opportunity | CRM Update Opportunity |
"I want to control the flow..."
→ Use a Control node
| Scenario | Node |
|---|---|
| Branch based on a condition | If |
| Combine multiple data streams | Zip |
| Add shared context to items | Broadcast |
| Expand an array to individual items | Select Many |
| Wait before continuing | Wait |
| End a branch without action | Sink |
Best Practices
1. Handle Errors
Connect error outputs to appropriate handling:
- Log errors for debugging
- Send alerts for critical failures
- Use Sink to gracefully terminate error paths
2. Use Appropriate Execution Modes
- Per-item when each item needs individual processing
- Batch when you need to aggregate or compare items
3. Configure Meaningful Names
Rename nodes to describe their purpose:
- ❌ "AI Prompt"
- ✅ "Summarize Meeting Transcript"
4. Keep Workflows Focused
- One workflow per logical automation
- Break complex processes into multiple workflows if needed
5. Test Before Releasing
- Use MANUAL trigger to test with real data
- Verify outputs at each step
- Check error handling paths