The orchestration editor lets you design multi-step workflows visually.
Every orchestration starts with a trigger:
Schedule the orchestration to run at a specific date and time. This is useful for one-time campaigns or scheduled outreach.
Start the workflow when a specific event occurs:
Start the workflow on demand from the UI or API.
Add actions as steps in your workflow:
Use an email strategy to send a personalized email to the contact. Select the strategy and configure any needed overrides.
Trigger an outbound call using a voice campaign.
Send a text message using an SMS agent.
Run an AI task agent as a workflow step. The agent receives accumulated data from prior steps and can reference that data in its instructions using placeholder syntax:
{{ key_name }}
For example, if a Store Read step loaded accounts_receivable, or a prior task agent produced taskAgentResponse, you can write:
Here is the data to process:
{{ accounts_receivable }}
Previous analysis: {{ taskAgentResponse }}
When a task agent runs inside an orchestration, it also receives the update_orchestration_store tool automatically. This allows it to write structured results back to the orchestration store without requiring a separate Store Write step.
Iterate over an array from a prior step and run nested actions for each item. Configure the source key, an item variable name, and an iteration mode:
Drag steps into the for-each body on the canvas to define what runs per item. See Recurring Workflows for more detail.
Use these actions to interact with the orchestration's persistent data store. See Recurring Workflows for more detail.
Pause the workflow for a specified duration before proceeding to the next step.
Add conditional branches based on contact behavior or workflow context:
Branch based on whether the recipient:
Example: send an email, wait two days, then branch based on whether the message was opened.
Branch based on contact properties, tags, or custom field values.
In addition to the visual editor, orchestrations can be created and managed programmatically through KarmaFlow's built-in MCP server. This allows external AI agents (Claude Desktop, Cursor, Windsurf, or custom applications) to build workflows on your behalf.
The MCP server provides tools to:
Steps are provided as an ordered array of { type, name, config } objects. The server auto-generates step IDs and links steps in sequence — no need to manage the graph manually.
| Name | Key Config Fields |
|---|---|
Event trigger (name: "") |
triggerKey — key from trigger catalog |
simple-time |
datetime (ISO 8601), timezone |
recurring-schedule |
frequency, time, timezone, daysOfWeek, dayOfMonth |
call-end |
voiceCampaign (ID), scopeToPlaceCall (bool) |
chat-session-end |
chatAgentId (ID) |
agent-form-submission |
formId (ID) |
form-endpoint-submission |
formEndpointId (ID) |
| Name | Key Config Fields |
|---|---|
mail-agent |
strategy (ID), includeLists ([IDs]) |
sms-agent |
smsAgent (ID) |
voice-agent |
voiceCampaign (ID) |
task-agent |
taskAgentId (ID), taskInstructions |
wait |
durationMinutes, durationHours, durationSeconds |
push-to-zapier-webhook |
webhookUrl |
send-transcript-to-webhook |
webhookUrl |
store-read |
keys (array) |
store-write |
keys (array), mode ("merge" or "replace"), values |
store-clear |
keys (array) |
collect-via-email |
to, subject, body, parseMode ("ai", "csv", "raw") |
for-each |
sourceKey, itemKey, iterationMode, delaySeconds, steps |
local-list |
rows (array), columns (array), fileName |
| Name | Key Config Fields |
|---|---|
outcome-router |
channel, sourceStepId, conditions: [{ triggerKey, label, steps }] |
if-then-branch |
conditions: [{ if, steps }] |
ai-router |
prompt, model, conditions: [{ id, label, description, steps }] |
See MCP Servers for endpoint and authentication details.
Each orchestration includes a dashboard showing: