Skip to content

Step Reference

Every trigger and step available in the flow editor, with what it takes and what it returns. For how to put them together, see the Projects & Flows guide.

Reading this page:

  • Configuration lists the fields you fill in on the node. A field marked required must be set before the flow validates.
  • Outputs are what the step publishes into the run context. A step's outputs are namespaced under the output name you give the node, so a Smart Agent named triage publishes {{triage.response}}.
  • How it behaves appears on the steps whose real configuration is not obvious from the field list — branching, loops and agents especially.

Fields whose notes say Shown when … only appear once the field they depend on has that value.


Triggers

Peer Message

Key: peer.message

Triggered when a message is received from a peer

Outputs

OutputTypeDescription
messagetextThe message content from the user
attachmentsarrayAny files or media attached to the message
messageIdstringIdentifier of the user message that triggered the flow
responseMessageIdstringIdentifier of the assistant's response message when available
historyarrayPrevious messages in the conversation
conversationIdstringIdentifier of the conversation
userIdstringIdentifier of the user

Peer Action

Key: peer.action

Triggered when an action is received from a peer

Configuration

FieldTypeNotes
inputslistEach entry: name, type, description.

API

Key: api

Triggered when an API request is received

Form

Key: form

Triggered when a form submission UI is received

Configuration

FieldTypeNotes
inputslistEach entry: name, type, description.

Task

Key: task

Triggered when a Task in this flow's project is run. Give a flow this trigger to make it selectable when creating a task; the task's name, detail and attachments arrive as trigger outputs.

Outputs

OutputTypeDescription
taskIdstringIdentifier of the task that started this run
namestringThe task's name, as typed by whoever created it
detaillong-textThe task's free-text detail / instructions
attachmentsarrayFiles attached to the task
prioritystringlow | normal | high
flowProjectIdstringThe project the task belongs to
taskobjectEvery field above in one object — handy for passing the task to an agent prompt or a subflow in one piece, e.g. {{task}}.

Schedule

Key: schedule

Triggered automatically based on a schedule defined by a cron expression

Configuration

FieldTypeNotes
crontext, requiredA cron expression to define the schedule (e.g., '0 * * * *' for every hour)
inputscodeDefault inputs to provide when triggered by schedule

Steps

AI & Language Models

An agent step: model, system prompt and user message

Speech to Text

Key: speech-to-text

Transcribe audio (base64) to text

Configuration

FieldTypeNotes
base64KeyselectKey in context containing base64 audio (data URL or raw base64)
base64long-textProvide base64 directly if not using a key

Outputs

OutputTypeDescription
languagestring
durationnumber
textlong-text

Agent

Key: agent

Use ReAct agent pattern to solve complex tasks with actions.

Configuration

FieldTypeNotes
modelIdmodel-selectIf left empty, the default workspace agent model will be used.
includeChatHistorycheckboxInclude previous conversation messages in the agent context. This allows the agent to maintain conversation continuity and reference past interactions. Default false.
systemPromptlong-textInstructions for guiding the agent's behavior and capabilities. Default "You are Cognipeer Agent, a focused AI that solves tasks step-by-step and uses integrated tools when necessary.".
userMessagelong-text, requiredThe user's message or task for the agent to process.
actionsmultiple-selectList of actions the agent can use to complete the task.
medialistEach entry: type, url.
output_typeselectChoose how the agent should format its response. Default "text". One of text, structured_output.
jsonSchemajson-schemaDefine the structure of the JSON output when using Structured Output. Shown when output_type is structured_output.
enableMemoryToolscheckboxLet the agent read, search, save and delete Flow Project memory on its own via tool calls. Default false.
memoryScopeselectDefault "project". One of project, flow, custom. Shown when enableMemoryTools is true.
memoryFlowIdtextOnly used when Memory Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when memoryScope is flow.
memoryCustomKeytextOnly used when Memory Scope is Custom — any identifier to bucket memory by, e.g. {{trigger.userId}}. Shown when memoryScope is custom.
memoryOperationsmultiple-selectDefault ["read","search","put","delete"]. One of read, search, put, delete. Shown when enableMemoryTools is true.
enableSandboxToolscheckboxLet the agent run shell commands, code, and file operations inside a sandbox via tool calls. Default false.
sandboxReftextSandbox Record ID from the project's Sandbox tab (pick one already created), or a template expression resolved at runtime (e.g. from a Create Sandbox node's output). Shown when enableSandboxTools is true.
sandboxOperationsmultiple-selectDefault ["exec","run_code","list_files","read_file","write_file","mkdir","delete","move"]. One of exec, run_code, list_files, read_file, write_file, mkdir, delete, move. Shown when enableSandboxTools is true.
injectSecretNamescheckboxAppend the names of this Flow Project's secrets to the system prompt so the agent knows which credentials are available as environment variables. Values are never included. Default true.

Outputs

OutputTypeDescription
responselong-text
reasoninglong-text
dataobjectParsed JSON data when using structured output.
toolCallsarrayList of actions called by the agent during execution.

Ask to LLM

Key: ask-to-llm

Send a prompt to the llm and get a response.

Configuration

FieldTypeNotes
modelIdmodel-select, required
promptlong-text, required
medialistEach entry: type, url.

Outputs

OutputTypeDescription
responselong-text

Ask to Peer

Key: ask-to-peer

Send a prompt to the peer and get a response.

Configuration

FieldTypeNotes
peerIdselect, required
promptlong-text, required

Outputs

OutputTypeDescription
responselong-text

Guardrail

Key: guardrail

Validate content against guardrail policies for PII detection, prompt shielding, and moderation.

Configuration

FieldTypeNotes
contentlong-text, requiredContent or template (supports {{ }}) that will be evaluated against the guardrail policy.
policyguardrail-policyConfigure PII detection, PromptShield, and moderation checks applied to this step.

Outputs

OutputTypeDescription
statusstringOverall evaluation status returned by the guardrail step (passed or blocked).
passedbooleanTrue when the content passes all configured guardrail checks without blocking issues.
errorsarrayList of guardrail violations detailing detected issues, severities, and recommended actions.

How it behaves

  • The pass path is the step's normal nextStepId.
  • The blocked path is data.failNextStepId — set it with connect_steps(branch: 'fail'). If it is left empty, blocked content continues down the normal path.

Extract Data

Key: extract-data

Extract structured data from text using an LLM and JSON schema.

Configuration

FieldTypeNotes
modelIdmodel-select, required
promptlong-textOptional prompt to guide the extraction. If empty, the entire context will be used.
jsonSchemajson-schema, requiredThe JSON schema defining the structure of data to extract
medialistEach entry: type, url.

Outputs

OutputTypeDescription
dataobject

Intent Parser

Key: intent-parser

Analyze text to detect user intent and extract parameters.

Configuration

FieldTypeNotes
modelIdmodel-select, required
promptlong-text
medialistEach entry: type, url.
intentslist, requiredEach entry: name, description.

Outputs

OutputTypeDescription
namestring

Smart Agent

Key: smart-agent

Run a long-running autonomous agent (Cognipeer Agent SDK) with planning, context summarization and tools. Compose several Smart Agents to accomplish complex work.

Configuration

FieldTypeNotes
modelIdmodel-selectIf left empty, the default workspace agent model will be used.
systemPromptlong-textInstructions guiding the agent's behavior. Supports {{template}} variables. Default "You are a Cognipeer Smart Agent. Plan your work, use the available tools, and produce a thorough, correct result.".
userMessagelong-text, requiredThe task/instructions for the agent to accomplish. Supports {{template}} variables.
planningModeselectHow the agent plans its work. Todo mode maintains a live checklist of steps. Default "todo". One of todo, planner_executor, reasoning_then_tools, off.
enableSummarizationcheckboxAutomatically compact long context/tool outputs so the agent can run for a long time without exceeding the token window. Default true.
maxToolCallsnumberSafety limit on the total number of tool calls the agent may make. Default 30.
toolApprovalModeselectPause the whole flow before the agent runs a gated tool, and wait for a human decision. In a Task the pause shows up as 'Waiting approval' with Approve/Reject; the flow continues from where it stopped. Default "off". One of off, all, selected.
approvalToolstextComma-separated tool names, e.g. sandbox_exec, send_email. Names must match the tool names the agent sees. Shown when toolApprovalMode is selected.
enableAskUsercheckboxGives the agent an ask_user tool so it can stop and ask instead of guessing. The flow pauses the same way an approval does, and resumes with the answer. Default false.
actionsmultiple-selectTools/actions the agent can use to complete the task.
enableWebSearchcheckboxGive the agent a web_search tool so it can research online. Requires a Tavily API key on the server; without one the agent simply gets no search tool. Default false.
connectedAppsmultiple-selectOther flows the agent may invoke as tools (each becomes an execute_<flow> tool).
connectedPeersmultiple-selectPeers the agent may delegate to as sub-agents (each becomes an ask_<peer> tool).
output_typeselectChoose how the agent should format its final response. Default "text". One of text, structured_output.
jsonSchemajson-schemaDefine the structure of the JSON output when using Structured Output. Shown when output_type is structured_output.
skillModeselectGive the agent access to workspace skills (Settings → Skills). Each skill is disclosed as a one-line header; its full prompt and tools load only when the agent opens it. Default "off". One of off, all, selected.
skillIdsskill-selectSkills this agent may open. Shown when skillMode is selected.
enableMemoryToolscheckboxLet the agent read, search, save and delete Flow Project memory on its own via tool calls. Default false.
memoryScopeselectDefault "project". One of project, flow, custom. Shown when enableMemoryTools is true.
memoryFlowIdtextOnly used when Memory Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when memoryScope is flow.
memoryCustomKeytextOnly used when Memory Scope is Custom — any identifier to bucket memory by, e.g. {{trigger.userId}}. Shown when memoryScope is custom.
memoryOperationsmultiple-selectDefault ["read","search","put","delete"]. One of read, search, put, delete. Shown when enableMemoryTools is true.
enableSandboxToolscheckboxLet the agent run shell commands, code, and file operations inside a sandbox via tool calls. Default false.
sandboxReftextSandbox Record ID from the project's Sandbox tab (pick one already created), or a template expression resolved at runtime (e.g. from a Create Sandbox node's output). Shown when enableSandboxTools is true.
sandboxOperationsmultiple-selectDefault ["exec","run_code","list_files","read_file","write_file","mkdir","delete","move"]. One of exec, run_code, list_files, read_file, write_file, mkdir, delete, move. Shown when enableSandboxTools is true.
injectSecretNamescheckboxAppend the names of this Flow Project's secrets to the system prompt so the agent knows which credentials are available as environment variables. Values are never included. Default true.

Outputs

OutputTypeDescription
responselong-text
dataobjectParsed JSON data when using structured output.
planobjectThe agent's final plan / todo list with step statuses.
toolCallsarrayTools the agent invoked during the run.
summariesarraySummarization events emitted while compacting context.
usageobjectToken usage reported for the run.
eventsarrayOrdered log of plan/tool/summarization events for detailed inspection.

How it behaves

  • userMessage and systemPrompt are rendered as templates, so this is where you feed the agent its input: {{detail}} from a task trigger, {{research.response}} from an earlier agent.
  • Reading the result: free text is at <output>.response. For anything a later step must branch on or iterate over, set output_type to "structured_output" with a jsonSchema — the parsed object is then at <output>.data.<field>, e.g. {{outline.data.sections}}.
  • An agent with no actions has NO tools: it can only reason over what you put in its prompt. It cannot search the web, read a URL or call an API unless you give it actions. Call list_workspace_resources to see which tool-actions this workspace actually has, and pass them by id or name.
  • enableWebSearch gives the agent a web_search tool without needing a tool-action, but it only works when the server has a Tavily API key configured; without one the agent gets no search tool.
  • maxToolCalls (default 30) is a hard cap — a research agent that must read many sources needs it raised.
  • toolApprovalMode/enableAskUser pause the whole flow waiting for a human. Only use them when the user asked for a human in the loop.

Workflow Control

An Each step: array variable, item limit and loop branches

Final

Key: final

Final step that contains outputs for the flow.

Configuration

FieldTypeNotes
outputTypeselectChoose how the final output should be structured. Default "structured". One of structured, message, text.

How it behaves

  • A final step ends its execution path — it has no nextStepId.
  • Every path through the flow must reach a final step.
  • Each entry's output is a template string rendered against the run context, and name becomes the key it is published under. For a markdown deliverable use type 'markdown' and put the whole document in output, e.g. "{{article}}".
  • A final step declares the run's RESULT. It does not create a downloadable file — use publish-file for that.

Condition

Key: condition

Condition step to control the app.

How it behaves

  • rule is evaluated as a raw JavaScript expression with the run context's variables in scope — use bare variable names (riskScore > 7), NOT {{template}} syntax.
  • Branches are tried top to bottom; the first rule that evaluates truthy wins.
  • If no rule matches, execution falls through to the condition step's own nextStepId — always wire that as the default/else path.
  • Set each branch's targetStepId with connect_steps(branch: 'condition', conditionKey: <branch id>), not by editing targetStepId directly.
  • A rule that names a variable which does not exist yet throws a ReferenceError and FAILS the run. Any variable a rule tests must be created by an earlier step (define-variable), or guarded with typeof.
  • A branch may target a step EARLIER in the flow — that backwards edge is how a revise-until-approved loop is built. Always bound it in the rule (e.g. approved !== true && revision &lt; 2); a run is aborted after ~500 step executions.

Classifier

Key: classifier

Use a model to classify input into one of multiple branches.

Configuration

FieldTypeNotes
modelIdmodel-select, required
promptlong-text, requiredDescribe what the model should classify. Template variables are supported.

Outputs

OutputTypeDescription
keystring
reasonstring

How it behaves

  • The model picks one category by matching its description, so descriptions must be mutually exclusive.
  • Wire each category with connect_steps(branch: 'classifier', conditionKey: <category id>).
  • If the model returns no category, execution falls through to the step's own nextStepId.

User Approval

Key: user-approval

Pause execution and request user approval before continuing. Execution resumes based on user's decision.

Configuration

FieldTypeNotes
messagelong-text, requiredMessage to display when requesting approval from the user

Outputs

OutputTypeDescription
decisionstringThe user's decision (approve or reject)
decidedAtdateWhen the decision was made
decidedBystringUser who made the decision

How it behaves

  • The approve path is the step's normal nextStepId.
  • The reject path is the top-level rejectNextStepId field — set it with connect_steps(branch: 'reject'). If it is left empty, rejecting continues down the SAME path as approving.

Client Tool

Key: client-tool

Pause execution and request client-side tool execution. The client executes the tool locally and provides the result to continue the flow.

Configuration

FieldTypeNotes
toolNametext, requiredName of the client-side tool to execute
parameterslistParameters to pass to the tool. Each parameter supports template variables. Each entry: key, value.

Outputs

OutputTypeDescription
resultanyThe output returned by the client after executing the tool
errorbooleanWhether the tool execution failed
executionIdstringUnique identifier for this tool execution

Each

Key: each

Iterate over an array and execute nested steps for every item.

Configuration

FieldTypeNotes
arrayVariableselect, requiredSelect the array to iterate over
maxItemsnumberOptional safety limit for processed items (leave empty for all)

Outputs

OutputTypeDescription
itemarrayAll items that were processed during the loop
resultsarrayDetailed output for each iteration
errorsarrayErrors that occurred during processing
successfulItemsnumberNumber of iterations completed without error

How it behaves

  • The loop body lives in data.steps[]. Add steps to it with add_step(parentStepId: <this step id>), never by writing data.steps directly.
  • Inside a loop body steps run in array order when nextStepId is empty, so body steps do not each need an explicit connection.
  • arrayVariable is a BARE context path, not a template — write "outline.data.sections", never "{{outline.data.sections}}". If the path does not resolve to an array the step does nothing and reports an error in its result instead of failing the run.
  • item and index are available as context variables inside the body.
  • A body step's output variable is overwritten on every iteration, so after the loop it holds the LAST iteration only. To keep every iteration's work, create a variable with define-variable BEFORE the loop and grow it inside the body — set-variable for a concatenated string, add-item-to-array for a list.

While

Key: while

Repeat nested steps while the condition evaluates to true.

Configuration

FieldTypeNotes
conditionlong-text, requiredJavaScript expression evaluated against the current context (e.g. score > 0)
maxIterationsnumberSafety limit to prevent infinite loops (default 200)

Outputs

OutputTypeDescription
resultsarrayOutputs returned from each loop run
iterationsnumberNumber of completed iterations
lastIterationobjectOutputs from the last iteration that ran
errorsarrayErrors captured while evaluating the loop

How it behaves

  • condition is a raw JavaScript expression over context variables, same as a condition step's rule — bare names, no {{templates}}.
  • The loop body lives in data.steps[] — add to it with add_step(parentStepId: <this step id>).
  • Every variable the condition tests MUST already exist when the step is first reached. A condition naming an undefined variable throws, and the step swallows the error and runs ZERO iterations — a silent no-op that looks like a working flow. Initialise the loop state with define-variable steps beforehand.
  • The body must change something the condition tests, and maxIterations (default 200) is the only other backstop.

End Session

Key: end-session

End the current conversation session. When triggered, the active session is marked as ended. A new session will automatically start when the user sends a new message.

Configuration

FieldTypeNotes
reasontextThe reason for ending the session (e.g., 'flow_completed', 'goal_achieved', 'task_finished'). Defaults to 'flow_completed' if not specified.

Outputs

OutputTypeDescription
successbooleanWhether the session was successfully ended
sessionIdstringID of the ended session
endReasonstringThe reason the session was ended
endedAtdateTimestamp when the session was ended
errorstringError message if the session could not be ended

Subflow

Key: subflow

Run another flow as a child and use its outputs. Enables reusable, composable flows that call each other.

Configuration

FieldTypeNotes
appIdselect, requiredThe flow to run as a subflow.
versionselectWhich version of the target flow to execute. Default "latest". One of latest, draft.
inputslistValues mapped into the subflow's trigger inputs. Each value supports {{template}} variables from the current flow. Each entry: key, value.

Outputs

OutputTypeDescription
outputobjectThe final outputs produced by the subflow.
responselong-textStringified subflow output, convenient for prompts.
appRunIdstringThe subflow's execution run id.
statusstring

How it behaves

  • inputs is a list of { key, value } pairs; value supports {{template}} variables from the current flow.

User Interaction

Show Form

Key: show-form

Display a form to collect user input. Supports both predefined forms (from form library) and inline form definitions with cascading/conditional fields.

Configuration

FieldTypeNotes
formIdselectSelect a predefined form from your form library. Leave empty to use inline form definition.
inlineFormobjectDefine form fields directly in the step. Use this for flow-specific forms or cascading scenarios.
titletextOverride the form title (optional).
descriptiontextOverride the form description (optional).
waitForSubmissionbooleanIf true, the flow will pause until the form is submitted. Default true.

Outputs

OutputTypeDescription
messageWidgetIdstringID of the created form widget instance
formIdstringID of the form (null for inline forms)
formTitlestringTitle of the displayed form
waitingForSubmissionbooleanWhether the flow is waiting for user to submit the form

Data & Databases

Search in Knowledgebase: data sources, prompt, result count

Search In Knowledgebase

Key: search-in-knowledgebase

Semantic search in the knowledgebase.

Configuration

FieldTypeNotes
datasourceIdsmultiple-select, required
promptlong-text, required
resultsCountnumber
saveSourcesToMessagecheckbox

Outputs

OutputTypeDescription
resultsarray

How it behaves

  • datasourceIds are workspace datasource ids — get them from list_workspace_resources. Do not invent them.

Web & Internet

Http Request

Key: http-request

Send a http request and get a response.

Configuration

FieldTypeNotes
urltext, required
methodselect, requiredOne of GET, POST, PUT, PATCH, DELETE.
headerslong-text
bodycode

Outputs

OutputTypeDescription
responseobject

Scrape Web Page

Key: scrape-web-page

Scrape web page using puppeteer.

Configuration

FieldTypeNotes
urllong-text, required

Outputs

OutputTypeDescription
urltext
titletext
descriptionlong-text
bodylong-text

Variable Manipulation

Define Variable

Key: define-variable

Define a new variable with a specific value.

Configuration

FieldTypeNotes
nametext, requiredName of the variable to define
typeselect, requiredType of the variable to define One of string, number, boolean, array, object.
valuelong-textInitial value for the variable

Outputs

OutputTypeDescription
valuetextThe value of the defined variable

How it behaves

  • name is the bare context key the variable is created under — read it back as {{name}}, and reference it in condition rules as a bare identifier. Do NOT also set the step's output field for this purpose.
  • value is rendered as a template, so a variable can be initialised from earlier results.
  • Use this to initialise loop state (counters, accumulators) BEFORE any condition/while rule tests it — an undefined variable in a rule is a ReferenceError.
  • For an accumulator, type 'string' with an empty value (concatenate with set-variable) or type 'array' with an empty value (append with add-item-to-array).

Set Variable

Key: set-variable

Set an existing variable to a new value.

Configuration

FieldTypeNotes
nameselect, requiredName of the variable to set
valuelong-text, requiredNew value for the variable

Outputs

OutputTypeDescription
valuetextThe new value of the variable

How it behaves

  • value is rendered as a template, which is what makes accumulation work: value "{{article}}\n\n{{sectionDraft.response}}" appends to the variable named article.
  • The variable must already exist (create it with define-variable); the new value is coerced to the existing variable's type.

Set State

Key: set-state

Set a state variable that persists across flow executions within the same conversation. State is stored in context.state and in the conversation document.

Configuration

FieldTypeNotes
nametext, requiredName of the state variable to set (accessible via state.variableName)
valuelong-text, requiredValue to store in the state variable

Outputs

OutputTypeDescription
valuetextThe value that was set in the state

Add Item to Array

Key: add-item-to-array

Add an item to an array variable.

Configuration

FieldTypeNotes
arrayNameselect, requiredName of the array variable
itemlist, requiredItem to add to the array Each entry: name, type, value.

Outputs

OutputTypeDescription
arrayarrayThe array after adding the item
lengthnumberThe new length of the array

How it behaves

  • arrayName is a BARE context variable name, not a template.
  • item is a LIST of field descriptors — [{ name, type, value }] — and each value is rendered as a template. The step pushes one object built from those fields, so item [{name:"content",type:"string",value:"{{draft.response}}"}] appends { content: "..." }.
  • The array is created if it does not exist, but initialising it with define-variable first is clearer and is required if a condition rule tests it.

Add Items to Array

Key: add-items-to-array

Add multiple items from context to an existing array variable.

Configuration

FieldTypeNotes
arrayVariableNameselect, requiredName of the array variable to add items to
itemsKeytext, requiredKey from context containing items to add to the array

Outputs

OutputTypeDescription
arrayarrayThe array after adding the items
addedCountnumberNumber of items added to the array
totalLengthnumberThe new total length of the array
successbooleanWhether the operation was successful

Increment Variable

Key: increment-variable

Increment a numeric variable by a specific amount.

Configuration

FieldTypeNotes
variableNameselect, requiredName of the numeric variable to increment
amountnumberAmount to increment by (default: 1) Default 1.

Outputs

OutputTypeDescription
valuenumberThe variable after incrementing

Decrement Variable

Key: decrement-variable

Decrement a numeric variable by a specific amount.

Configuration

FieldTypeNotes
variableNameselect, requiredName of the numeric variable to decrement
amountnumberAmount to decrement by (default: 1) Default 1.

Outputs

OutputTypeDescription
valuenumberThe variable after decrementing

Memory Management

Save User Memory

Key: save-user-memory

Save information to user memory for later retrieval.

Configuration

FieldTypeNotes
peerIdtext, requiredID of the peer to save memory for
keytext, requiredUnique key to identify this memory
valuelong-text, requiredValue to store in memory
descriptiontext, requiredDescription for this memory (required for better organization)
metadatalong-textAdditional metadata as JSON object

Outputs

OutputTypeDescription
successbooleanWhether the memory was saved successfully
memoryIdtextID of the saved memory record
keytextThe key used to save the memory
savedbooleanWhether the memory was saved

Search User Memory

Key: search-user-memory

Search for user memories using text query across keys, values, and descriptions.

Configuration

FieldTypeNotes
peerIdtext, requiredID of the peer to search memory for
querytextText to search for in memory (leave empty to get all records)
limitnumberMaximum number of results (default: 10)

Outputs

OutputTypeDescription
successbooleanWhether the search was successful
foundbooleanWhether any memories were found
countnumberNumber of memories found
resultsarrayArray of found memories

Delete User Memory

Key: delete-user-memory

Delete a specific user memory record using its key.

Configuration

FieldTypeNotes
peerIdtext, requiredID of the peer to delete memory from
keytext, requiredKey of the memory to delete
confirmDeleteboolean, requiredSafety confirmation for deletion (must be true)

Outputs

OutputTypeDescription
successbooleanWhether the deletion was successful
deletedbooleanWhether the memory was deleted
foundbooleanWhether the memory was found before deletion
keytextThe key that was deleted
deletedValuetextThe value that was deleted

Memory: Read

Key: flow-memory-read

Read entries from Flow Project memory (Project, Flow, or Custom scope), newest/oldest first.

Configuration

FieldTypeNotes
flowProjectIdtextLeave as default to use the current flow's project. Default "{{flow.flowProjectId}}".
scopeselect, requiredDefault "project". One of project, flow, custom.
flowIdtextOnly used when Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when scope is flow.
customKeytextOnly used when Scope is Custom — any identifier you want to bucket memory by. Shown when scope is custom.
limitnumberMaximum number of items to return. Default 20.
orderselectDefault "newest". One of newest, oldest.

Outputs

OutputTypeDescription
itemsarray
countnumber
memoryStoreIdtext

Key: flow-memory-search

Search Flow Project memory (Project, Flow, or Custom scope) by text across key and value.

Configuration

FieldTypeNotes
flowProjectIdtextLeave as default to use the current flow's project. Default "{{flow.flowProjectId}}".
scopeselect, requiredDefault "project". One of project, flow, custom.
flowIdtextOnly used when Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when scope is flow.
customKeytextOnly used when Scope is Custom — any identifier you want to bucket memory by. Shown when scope is custom.
querytextText to search for across keys and values (leave empty to get all records).
limitnumberDefault 20.

Outputs

OutputTypeDescription
itemsarray
countnumber
foundboolean
memoryStoreIdtext

Memory: Put

Key: flow-memory-put

Save (create or update) a key/value entry in Flow Project memory (Project, Flow, or Custom scope).

Configuration

FieldTypeNotes
flowProjectIdtextLeave as default to use the current flow's project. Default "{{flow.flowProjectId}}".
scopeselect, requiredDefault "project". One of project, flow, custom.
flowIdtextOnly used when Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when scope is flow.
customKeytextOnly used when Scope is Custom — any identifier you want to bucket memory by. Created automatically on first write. Shown when scope is custom.
keytext, requiredUnique key to identify this memory entry within its scope.
valuelong-text, requiredValue to store.

Outputs

OutputTypeDescription
successboolean
memoryStoreIdtext
keytext

Memory: Delete

Key: flow-memory-delete

Delete a specific entry from Flow Project memory using its key.

Configuration

FieldTypeNotes
flowProjectIdtextLeave as default to use the current flow's project. Default "{{flow.flowProjectId}}".
scopeselect, requiredDefault "project". One of project, flow, custom.
flowIdtextOnly used when Scope is Flow. Leave as default for the current flow. Default "{{flow.id}}". Shown when scope is flow.
customKeytextOnly used when Scope is Custom — any identifier you want to bucket memory by. Shown when scope is custom.
keytext, requiredKey of the memory entry to delete.
confirmDeleteboolean, requiredSafety confirmation for deletion (must be true).

Outputs

OutputTypeDescription
successboolean
deletedboolean
foundboolean
keytext
deletedValuetext

Sandbox

Sandbox: Create

Key: flow-sandbox-create

Create a new persistent sandbox and add it to the Flow Project's Sandbox list.

Configuration

FieldTypeNotes
flowProjectIdtextLeave as default to use the current flow's project. Default "{{flow.flowProjectId}}".
labeltextA friendly name shown in the project's Sandbox tab.
templatetextLeave empty to use the workspace default sandbox template.
secretModeselectWhich of the Flow Project's secrets are set as environment variables inside this sandbox. Default "all". One of all, selected, none.
secretKeystextComma-separated secret names to inject, e.g. GITHUB_TOKEN, STRIPE_KEY. Only used when Project Secrets is set to "selected". Shown when secretMode is selected.
envcodeAdditional non-secret environment variables as a JSON object, e.g. {"NODE_ENV": "production"}. These override project secrets on a name clash.

Outputs

OutputTypeDescription
sandboxRecordIdtext
sandboxIdtext
statustext

Sandbox: Run

Key: flow-sandbox-run

Run an operation inside an existing sandbox — shell command, code execution, or a file operation.

Configuration

FieldTypeNotes
sandboxReftext, requiredSandbox Record ID from the project's Sandbox tab (or a Create Sandbox node's output), or a template expression resolved at runtime.
operationselect, requiredDefault "exec". One of exec, run_code, list_files, read_file, write_file, mkdir, delete, move.
commandlong-textShown when operation is exec.
timeoutSecnumberDefault 120. Shown when operation is exec.
languageselectDefault "python". One of python, javascript. Shown when operation is run_code.
codelong-textShown when operation is run_code.
pathtextSandbox-relative path, e.g. /workspace/data.csv Shown when operation is list_files / read_file / write_file / mkdir / delete / move.
destinationtextShown when operation is move.
contentlong-textShown when operation is write_file.
encodingselectDefault "utf8". One of utf8, base64. Shown when operation is read_file / write_file.
recursivecheckboxDefault true. Shown when operation is delete.

Outputs

OutputTypeDescription
successboolean
stdoutlong-text
stderrlong-text
exitCodenumber
itemsarray
contentlong-text

Sandbox: Start

Key: flow-sandbox-start

Start a stopped sandbox.

Configuration

FieldTypeNotes
sandboxReftext, requiredSandbox Record ID from the project's Sandbox tab, or a template expression.

Outputs

OutputTypeDescription
statustext

Sandbox: Wait Until Running

Key: flow-sandbox-wait-until-running

Pass through immediately if the sandbox is already running; otherwise poll every 500ms until it is.

Configuration

FieldTypeNotes
sandboxReftext, requiredSandbox Record ID from the project's Sandbox tab, or a template expression.
timeoutSecnumberGive up and fail the step if the sandbox hasn't reached running within this time. Default 120.

Outputs

OutputTypeDescription
statustext
successboolean

Sandbox: Stop

Key: flow-sandbox-stop

Stop (suspend) a running sandbox. Data is kept.

Configuration

FieldTypeNotes
sandboxReftext, requiredSandbox Record ID from the project's Sandbox tab, or a template expression.

Outputs

OutputTypeDescription
statustext

Sandbox: Delete

Key: flow-sandbox-delete

Permanently delete a sandbox and remove it from the project's Sandbox list.

Configuration

FieldTypeNotes
sandboxReftext, requiredSandbox Record ID from the project's Sandbox tab, or a template expression.
confirmDeleteboolean, requiredSafety confirmation for deletion (must be true).

Outputs

OutputTypeDescription
successboolean
deletedboolean

Files

Publish File

Key: publish-file

Publish a file as a downloadable output of this run. Takes a file already inside a sandbox (by path) or base64 content, stores it, and attaches it to the run — where the Task detail view lists it under Output files.

Configuration

FieldTypeNotes
sourceselect, requiredDefault "sandbox". One of sandbox, text, base64.
textlong-textText to publish as a file, e.g. {{article}} for a markdown document the flow assembled. Set File Name with a matching extension. Shown when source is text.
sandboxReftextSandbox Record ID from the project's Sandbox tab, or a template expression. Shown when source is sandbox.
pathtextAbsolute path inside the sandbox, e.g. /workspace/report.pdf Shown when source is sandbox.
base64textTemplate expression resolving to base64 content, e.g. {{steps.x.data}} Shown when source is base64.
fileNametextName shown to the user. Defaults to the sandbox file's own name.

Outputs

OutputTypeDescription
successboolean
keytext
fileNametext
downloadPathtext
downloadLinktext

How it behaves

  • This is the only step that attaches a real file to the run — it is what appears under a Task's "Output files" for download. save-text-file merely returns a temporary link.
  • source 'text' is the simplest form: put the rendered document in text (e.g. "{{article}}") and set a fileName with the right extension (report.md). source 'sandbox' reads a path from a sandbox; source 'base64' takes already-encoded content.

Reporting & Analytics

Track Event

Key: track-event

Record a structured, durable business event for reporting (e.g. 'this email was routed to support'). Unlike debug logs, this always persists regardless of the flow's debug setting, and is meant to be queried/aggregated later (counts, breakdowns by dimension, trends). Use this after a decision/classification/output point whenever the flow author wants durable domain reporting, not raw technical tracing.

Configuration

FieldTypeNotes
eventNametext, requiredStable identifier for this kind of event, e.g. 'email_processed'.
dimensionslistCategorical labels to group/filter by later (e.g. category, destination). Each entry: key, value.
measureslistNumeric values to count/sum later (e.g. count, amount). Each entry: key, value.

Outputs

OutputTypeDescription
successboolean
eventIdtextID of the persisted event record.

Utilities

Execute NodeJS

Key: execute-nodejs

Execute NodeJS code.

Configuration

FieldTypeNotes
codecode

Outputs

OutputTypeDescription
responseobject

Check Regex

Key: check-regex

Check if a string matches a regular expression pattern.

Configuration

FieldTypeNotes
inputlong-text, requiredThe string to check against the regex pattern
patterntext, requiredRegular expression pattern to test
flagstextOptional regex flags (e.g., 'g', 'i', 'm')

Outputs

OutputTypeDescription
isMatchbooleanWhether the input matches the pattern
matchesarrayArray of matched substrings

Read File

Key: read-file

Read File from url or file key in Cognipeer with context.

Configuration

FieldTypeNotes
fileKeyselect, required

Outputs

OutputTypeDescription
base64text

Read File From URL

Key: read-file-from-url

Read File from url

Configuration

FieldTypeNotes
urltext

Outputs

OutputTypeDescription
base64text

Convert To Markdown

Key: convert-to-markdown

Convert base64 content to markdown.

Configuration

FieldTypeNotes
keyselect, required

Outputs

OutputTypeDescription
markdownlong-text

Markdown To PDF

Key: markdown-to-pdf

Convert markdown content to a PDF file and return it as base64.

Configuration

FieldTypeNotes
markdownKeyselect, requiredKey from context containing markdown content to convert
fileNametextOptional file name to expose in outputs (defaults to document.pdf)
titletextOptional document title used in PDF metadata

Outputs

OutputTypeDescription
base64textPDF file content as base64 string
mimeTypetextMIME type of the generated PDF
fileNametextSuggested PDF file name
sizenumberSize of the generated PDF in bytes

Chunk Content

Key: chunk-content

Split content into chunks based on specified parameters.

Configuration

FieldTypeNotes
contentlong-text, requiredThe content to be chunked
chunkTypeselect, requiredThe type of chunking method to use One of sentenceSplitter, tokenizer, recursiveCharacterWithSpecialSeparators, paragraphSplitter, regexSplitter.
chunkSizenumberMaximum size of each chunk (for recursive character and paragraph splitters)
chunkOverlapnumberNumber of characters to overlap between chunks
maxTokensnumberMaximum number of tokens per chunk (for tokenizer)
maxChunkSizenumberMaximum size of each chunk (for paragraph and regex splitters)
separatorslong-textJSON array of separators for recursive character splitter (e.g., ["\n\n", "\n", " "])
regexPatterntextRegular expression pattern for regex splitter

Outputs

OutputTypeDescription
chunksarrayArray of chunked content strings
chunkCountnumberTotal number of chunks generated

JSON to Excel

Key: json-to-excel

Convert JSON data to Excel file and return as base64.

Configuration

FieldTypeNotes
jsonDataKeyselect, requiredKey from context containing JSON data to convert to Excel
worksheetNametextName for the worksheet (default: Sheet1)

Outputs

OutputTypeDescription
base64textExcel file content as base64 string
fileNametextGenerated file name
mimeTypetextMIME type of the Excel file
sizenumberSize of the file in bytes

Save File

Key: save-file

Save base64 content as a file and generate download link.

Configuration

FieldTypeNotes
base64Keyselect, requiredKey from context containing base64 encoded file content to save
fileNametext, requiredName for the file including extension
expiryMinutesnumberHow long the download link should be valid (default: 1440 minutes / 24 hours)

Outputs

OutputTypeDescription
successbooleanWhether the file was saved successfully
fileKeytextUnique key for the saved file
fileNametextName of the saved file
downloadLinktextTemporary download link for the file
expiryMinutesnumberHow long the download link is valid
messagetextStatus message
errortextError message if operation failed

Save Text File

Key: save-text-file

Save plain text content as a file and generate a direct download link.

Configuration

FieldTypeNotes
textKeyselectKey in context that holds the text content. If not set, uses the inline Text field.
textlong-textInline text content to save. If both textKey and text are provided, inline text is used.
fileNametext, requiredName for the file including extension (e.g., notes.txt)
expiryMinutesnumberHow long the download link should be valid (default: 1440 minutes / 24 hours)

Outputs

OutputTypeDescription
successbooleanWhether the file was saved successfully
fileKeytextUnique key for the saved file
fileNametextName of the saved file
downloadLinktextTemporary download link for the file
expiryMinutesnumberHow long the download link is valid
messagetextStatus message
errortextError message if operation failed

How it behaves

  • textKey is a BARE context path (e.g. "article"), while text is a template string. If both are set, text wins.
  • This does NOT attach the file to the run — use publish-file when the user should be able to download the result from the task.

String to JSON

Key: string-to-json

Parse a string and convert it to JSON object.

Configuration

FieldTypeNotes
stringValuelong-text, requiredThe string content to parse as JSON

Outputs

OutputTypeDescription
jsonObjectobjectParsed JSON object from the string
successbooleanWhether the parsing was successful
errortextError message if parsing failed

JSON to String

Key: json-to-string

Convert JSON object to string representation.

Configuration

FieldTypeNotes
jsonKeyselect, requiredKey from context containing JSON data to convert to string
prettyFormatbooleanFormat the JSON string with indentation for readability

Outputs

OutputTypeDescription
stringValuetextJSON object converted to string format
successbooleanWhether the conversion was successful
errortextError message if conversion failed

Widgets

Add Widget to Message

Key: add-widget-to-message

Attach a widget to the assistant's response message and prefill its initial state.

Outputs

OutputTypeDescription
messageWidgetIdstringIdentifier of the created message widget record
widgetIdstringIdentifier of the attached widget
widgetNamestringName of the attached widget
initialStateobjectInitial state passed to the widget

Studio · Pulse — Cognipeer product documentation