This document covers every node type in Agent Studio with all configurable fields. Open the Properties panel by clicking any node in the Builder.
Every node has a shared Label field — the display name shown on the node in the flow canvas.
Template variables — most text fields support {{variable_name}} syntax for dynamic values. Use dot notation for nested paths ({{user.email}}), bracket notation for arrays ({{items[0]}}).
These nodes handle direct interaction with the user.
Displays a text message to the user. Use it for greetings, instructions, and notifications.
| Field | Required | Default | Description |
|---|---|---|---|
| Message | ✅ | — | Text shown to the user. Supports {{variables}}. |
Example: Hello {{user_name}}! How can I help you today?
Waits for the user to type a response and saves it to a variable. Required before any node that reads user input.
| Field | Required | Default | Description |
|---|---|---|---|
| Variable Name | ✅ | — | Where the user's input is stored (e.g. user_question, user_email). No {{}} here — just the name. |
| Prompt | — | — | Optional text shown to the user as a question. If empty, the flow waits silently. |
Tip: Always place a Capture node before KB Search — it collects the question into a variable that KB Search uses for retrieval.
Displays a message with clickable options. Use it for menus, category selection, and confirmations.
| Field | Required | Default | Description |
|---|---|---|---|
| Message | ✅ | — | Text shown above the buttons (e.g. Choose an option:). |
| Variable Name | ✅ | — | Variable that stores the user's selection (e.g. user_choice). |
| Buttons | ✅ | — | List of options. Each has a Label (button text) and Value (stored value). |
Terminates the flow and optionally displays a closing message.
| Field | Required | Default | Description |
|---|---|---|---|
| End Message | — | — | Optional text shown when the flow closes (e.g. Thank you for chatting!). |
These nodes manage routing, loops, branching, and variable state.
Routes the flow based on a true/false check. Has two output handles: true and false.
| Field | Required | Default | Description |
|---|---|---|---|
| (none) | — | — | Conditions are configured on the edges (connections) in the Builder, not in the Properties panel. Click an edge to set its condition. |
Assigns a value to a variable without user interaction. Use it to initialize state, compute values, or transform data.
| Field | Required | Default | Description |
|---|---|---|---|
| Variable Name | ✅ | — | The variable to set (e.g. score, is_premium). |
| Value | ✅ | — | Static text, number, or a reference: {{last_message}}, {{user_score}}. |
Redirects the flow to another node. Use it to loop back, skip sections, or build multi-step flows.
| Field | Required | Default | Description |
|---|---|---|---|
| Target Node | ✅ | — | Dropdown of all nodes in the flow. Select the destination node. |
Pauses the flow for a set duration. Use it to add thinking-time delay between messages.
| Field | Required | Default | Description |
|---|---|---|---|
| Duration (seconds) | ✅ | — | How long to pause. Minimum 1s, maximum 5s. |
Routes the flow to one of several branches based on a variable's value. Like a multi-way if/else.
| Field | Required | Default | Description |
|---|---|---|---|
| Variable | ✅ | — | The variable whose value is matched (name only, no {{}}). |
| Operator | — | equals |
Match operator: equals, not_equals, contains, greater_than, less_than, is_truthy, is_falsy. |
| Cases | ✅ | — | List of cases. Each has a Value to match and a Label. Each case gets its own output handle. |
| Output Variable | — | switch_result |
Stores match metadata ({ matched, value }). |
Tip: Connect each case handle to a different branch. An unmatched value exits through the default handle.
Repeats a section of the flow. Supports three modes: fixed count, until condition, and while condition.
| Field | Required | Default | Description |
|---|---|---|---|
| Mode | ✅ | count |
count — fixed iterations. condition — repeat until condition is met. while — repeat while condition is true. |
| Max Iterations | — | — | Upper safety limit (1–100). Prevents infinite loops. |
| Loop Variable | — | — | Variable that stores the current iteration index (0-based). |
| Condition Variable | — | — | (condition/while modes) Variable to evaluate. |
| Condition Operator | — | — | (condition/while modes) One of: equals, not_equals, contains, greater_than, less_than, is_truthy, is_falsy. |
| Condition Value | — | — | (condition/while modes) Value to compare against. |
Executes up to 5 independent branches simultaneously and merges their results. Use it for fan-out patterns (e.g. run 3 AI calls at once).
| Field | Required | Default | Description |
|---|---|---|---|
| Branches | ✅ | — | Up to 5 branches. Each has a Label and an Output Variable for that branch's result. |
Tip: Each branch runs in isolation on a copy of the current variables. Results are merged back after all branches complete.
Extracts patterns from recent agent execution history and stores them as instincts for continuous learning. Part of the ECC module — requires ECC_ENABLED=true.
| Field | Required | Default | Description |
|---|---|---|---|
| Pattern Name | ✅ | — | Name for the pattern being extracted (e.g. user_prefers_short_answers). Supports {{variables}}. |
| Pattern Description | — | — | Human-readable description of what this pattern captures. |
| Output Variable | — | learn_result |
Stores the result: { instinctId, confidence, frequency }. |
Instincts with confidence ≥ 0.85 are automatically promoted to Skills via the
/api/skills/evolveendpoint.
These nodes call language models for generation, classification, extraction, and evaluation.
Generates text using a language model. The primary node for conversational AI, RAG responses, and reasoning tasks.
| Field | Required | Default | Description |
|---|---|---|---|
| System Prompt | — | — | Instructions defining model behavior and persona. Supports {{variables}} and {{kb_context}}. |
| Model | — | deepseek-chat |
The AI model to use. See Supported Models. |
| Max Tokens | — | 500 |
Maximum response length in tokens. |
| Output Variable | — | — | If set, stores the response in this variable for later use. |
| Output Schema | — | — | Named schema to enforce on the response JSON: CodeGenOutput, PRGateOutput, ArchitectureOutput. When set, uses generateObject to force structured output. If the response doesn't match the schema, an error is returned. |
| Enable Agent Orchestration | — | off | When on, the AI can call sibling agents as tools during generation. |
Tip: When connected downstream from a KB Search node,
{{kb_context}}is automatically available in the system prompt — no manual wiring needed.
Typed output schemas: Use
outputSchema: "CodeGenOutput"on code-generation nodes andoutputSchema: "PRGateOutput"on review nodes to get validated, parseable JSON between agents. Schema definitions live insrc/lib/sdlc/schemas.ts.
Classifies user input into one of several categories using AI. Use it to route the flow based on intent.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable whose content is classified (e.g. user_question). |
| Categories | ✅ | — | List of category names (e.g. complaint, inquiry, order). Add one per line. |
| Model | — | deepseek-chat |
AI model used for classification. |
The classification result (category name) is stored in a variable named after the node's ID. Connect edges labeled with each category name to route the flow.
Extracts structured fields from unstructured text using AI.
| Field | Required | Default | Description |
|---|---|---|---|
| Fields to Extract | ✅ | — | List of fields. Each has a Name (e.g. email), Type (string, number, boolean), and Description (what to extract). |
| Model | — | deepseek-chat |
AI model used for extraction. |
Extracted fields are stored as individual variables:
{{email}},{{phone}}, etc.
Summarizes text from a variable into a shorter form.
| Field | Required | Default | Description |
|---|---|---|---|
| Output Variable | — | summary |
Variable where the summary is stored. |
| Max Length (chars) | — | 200 |
Maximum character length of the summary. |
| Model | — | deepseek-chat |
AI model used for summarization. |
Scores content against custom criteria using AI as a judge. Use it to assess quality, correctness, or alignment within a flow.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable containing the content to evaluate. |
| Criteria | ✅ | — | Description of what to evaluate (e.g. Is the response factually accurate and under 100 words?). |
| Output Variable | — | eval_result |
Stores { score, reasoning } where score is 0.0–1.0. |
| Model | — | deepseek-chat |
AI model used as judge. |
Saves a value to the agent's persistent memory across conversations.
| Field | Required | Default | Description |
|---|---|---|---|
| Key | ✅ | — | Unique identifier for this memory entry. Supports {{variables}} (e.g. pref_{{user_id}}). |
| Value | ✅ | — | Content to store. Supports {{variables}}. JSON is auto-parsed if valid. |
| Category | — | general |
Groups related memories (e.g. preferences, history). |
| Importance | — | 0.5 |
Priority score 0.0–1.0. Higher importance memories are preferred in semantic search. |
| Generate Embedding | — | off | When on, creates a vector embedding for semantic search retrieval. |
Reads from the agent's persistent memory. Supports exact key lookup, category listing, and semantic search.
| Field | Required | Default | Description |
|---|---|---|---|
| Mode | ✅ | key |
key — fetch by exact key. category — list all in a category. search — semantic similarity search. |
| Key | — | — | (key mode) The exact key to retrieve. |
| Category | — | — | (category mode) Category to list. |
| Query | — | — | (search mode) Natural language query for semantic search. |
| Output Variable | — | memory_result |
Variable where the result is stored. |
These nodes handle knowledge base retrieval and flow entry points.
Searches the agent's Knowledge Base using hybrid retrieval (semantic + BM25) and stores results in kb_context.
| Field | Required | Default | Description |
|---|---|---|---|
| Query Variable | ✅ | — | Variable name containing the search query — no {{}} brackets, just the name (e.g. user_question). |
| Top K Results | — | 5 |
Number of chunks to retrieve. Automatically increases to 8 for longer queries. |
Results are always stored in
{{kb_context}}— there is no Output Variable field. Connect directly to an AI Response node;{{kb_context}}is auto-injected into the system prompt.
Flow entry point that fires on a schedule. No input handle — this is where the flow starts.
| Field | Required | Default | Description |
|---|---|---|---|
| Mode | ✅ | manual |
cron — cron expression (e.g. 0 9 * * 1 for every Monday at 9am). interval — repeat every N minutes. manual — triggered only via API. |
| Cron Expression | — | — | (cron mode) Standard 5-field cron expression. |
| Interval (minutes) | — | — | (interval mode) How often to fire in minutes. |
Flow entry point that fires when an inbound webhook is received. No input handle.
| Field | Required | Default | Description |
|---|---|---|---|
| Webhook ID | — | auto | Unique identifier for this trigger. Auto-generated. |
| Event Filters | — | — | If set, only fires when the event type matches one of these values. Empty = accept all. |
| Body Mapping | — | — | Maps JSON paths from the payload to variables (e.g. $.action → webhook_action). |
| Header Mapping | — | — | Maps headers to variables (e.g. x-github-event → event_type). |
Trigger URL:
POST /api/agents/{agentId}/trigger/{webhookId}. Authenticated via HMAC-SHA256. Injected variables:{{__webhook_payload}},{{__webhook_event_type}},{{__webhook_id}}.
See Inbound Webhooks for provider presets (GitHub, Stripe, Slack).
These nodes connect flows to external services, APIs, and tools.
Sends an HTTP request to any external API. Use it to read from or write to CRMs, databases, and third-party services.
| Field | Required | Default | Description |
|---|---|---|---|
| Method | ✅ | GET |
HTTP method: GET, POST, PUT, PATCH, DELETE. |
| URL | ✅ | — | API endpoint. Supports {{variables}} (e.g. https://api.example.com/users/{{user_id}}). |
| Body | — | — | JSON request body. Supports {{variables}} (e.g. {"name": "{{user_name}}"}). |
| Output Variable | ✅ | — | Variable where the response JSON is stored. |
Sends an HTTP request as a fire-and-forget notification to an external service. Identical fields to API Call.
| Field | Required | Default | Description |
|---|---|---|---|
| Method | ✅ | POST |
HTTP method. |
| URL | ✅ | — | Webhook endpoint URL. Supports {{variables}}. |
| Body | — | — | JSON payload. Supports {{variables}}. |
| Output Variable | — | — | Optional — stores the response if needed. |
Unlike API Call, Webhook is semantically for outbound notifications (Slack, Discord, Zapier). Use API Call when you need to read the response.
Deterministically calls a specific tool on a connected MCP server. Unlike the AI Response node (which decides when to call tools), this always calls the tool at this exact point in the flow.
| Field | Required | Default | Description |
|---|---|---|---|
| MCP Server | ✅ | — | Dropdown of configured MCP servers. Add servers from the dashboard → MCP Servers. |
| Tool | ✅ | — | Dropdown of available tools on the selected server. Use "Test Connection" to refresh the tools cache. |
| Input Mapping | — | — | Maps tool parameters to values. Each row: parameter name (left) + template value (right, e.g. {{user_question}}). |
| Output Variable | ✅ | — | Variable where the tool result is stored. |
| Input Schema | — | — | Named schema (e.g. CodeGenOutput) to validate input args before calling the tool. Rejects the call with [Error: Input validation failed ...] if invalid. |
| Output Schema | — | — | Named schema (e.g. PRGateOutput) to validate the tool's response. Sets output variable to [Error: Output validation failed ...] if invalid. |
Schema enforcement: If the MCP server's toolsCache contains a JSON Schema for the tool's input parameters, those are automatically validated before the call (checks required fields and types). Named schemas use the Zod registry in src/lib/sdlc/schemas.ts.
Example pattern: Capture → MCP Tool (search tool with {{user_question}}) → AI Response (uses {{search_results}} in system prompt).
Calls another agent and waits for its response. Use it for agent-to-agent orchestration and task delegation.
| Field | Required | Default | Description |
|---|---|---|---|
| Agent | ✅ | — | Searchable dropdown of available agents in your workspace. |
| Input Mapping | — | — | Key-value pairs sent to the called agent (e.g. code → {{generatedCode}}). |
| Output Variable | — | agent_result |
Variable where the called agent's response is stored. |
| Input Schema | — | — | Named schema to validate the input mapping before calling the agent. Call is rejected if invalid. |
| Output Schema | — | — | Named schema (e.g. PRGateOutput) to validate the agent's response. Sets output variable to null and adds an error message if the response doesn't match. |
| On Error | — | continue |
continue — flow proceeds with error in variable, stop — halts flow on failure. |
Protected by circuit breaker (OPEN/CLOSED/HALF_OPEN), rate limiter, and cycle detection. Maximum call depth: 3.
Pauses the flow and waits for a human to approve or reject before continuing. Use it for high-stakes actions that need oversight.
| Field | Required | Default | Description |
|---|---|---|---|
| Title | ✅ | — | Short approval request title (e.g. Approve refund for {{user_name}}). |
| Description | — | — | Detailed context for the reviewer. Supports {{variables}}. |
| Options | — | Approve / Reject |
Custom button labels for the reviewer. |
Pending requests appear in
/api/approvals. Flow resumes after a response viaPOST /api/approvals/{requestId}/respond.
Fetches content from a URL and stores the result. Use it to read web pages, APIs, or public data sources.
| Field | Required | Default | Description |
|---|---|---|---|
| URL | ✅ | — | The URL to fetch. Supports {{variables}}. Validated against SSRF blocklist. |
| Method | — | GET |
HTTP method. |
| Output Variable | ✅ | — | Variable where the fetched content is stored. |
Private IP ranges (10.x, 192.168.x, 127.x) are blocked. Use API Call for authenticated requests with custom headers.
Performs browser automation actions via a connected Playwright MCP server. Use it for web scraping, form filling, and multi-step site navigation.
| Field | Required | Default | Description |
|---|---|---|---|
| MCP Server | ✅ | — | A Playwright-compatible MCP server (e.g. @playwright/mcp). |
| Action | ✅ | — | Browser action type: navigate, click, type, screenshot, extract, etc. |
| Parameters | — | — | Action-specific parameters. Supports {{variables}}. |
| Output Variable | — | browser_result |
Variable where the action result is stored. |
For multi-step navigation, use an AI Response node with the Playwright MCP attached — the AI drives the browser autonomously across up to 20 tool steps.
Sends an email via an external email service endpoint (webhook-style, provider-agnostic).
| Field | Required | Default | Description |
|---|---|---|---|
| To | ✅ | — | Recipient email address. Supports {{variables}} (e.g. {{user_email}}). |
| Subject | ✅ | — | Email subject line. Supports {{variables}}. |
| Body | ✅ | — | Email body. Supports {{variables}}. Enable HTML toggle for HTML emails. |
| From Name | — | Agent Studio |
Sender display name. |
| Reply To | — | — | Optional reply-to address. |
| Webhook URL | ✅ | — | Your email provider's webhook endpoint (SendGrid, Resend, Mailgun, etc.). |
| HTML | — | off | When on, body is sent as HTML rather than plain text. |
| Output Variable | — | email_result |
Stores the send result. |
Sends a notification through one of several channels. Lighter-weight than Email Send for internal alerts and logs.
| Field | Required | Default | Description |
|---|---|---|---|
| Channel | ✅ | log |
log — server log only. in_app — in-app notification. webhook — POST to a URL. |
| Message | ✅ | — | Notification content. Supports {{variables}}. |
| Webhook URL | — | — | (webhook channel) Destination URL. |
| Output Variable | — | — | Optional — stores delivery result. |
Transforms data between formats (JSON, CSV, text, template). Use it to reshape data between nodes.
| Field | Required | Default | Description |
|---|---|---|---|
| Format | ✅ | — | Target format: json_to_text, text_to_json, csv_to_json, json_to_csv, template. |
| Input Variable | ✅ | — | Variable containing the source data. |
| Direct Input Value | — | — | Literal value to transform (alternative to Input Variable). |
| Output Variable | ✅ | — | Variable where the transformed result is stored. |
| Template | — | — | (template format) Handlebars-style template with {{variables}}. |
| Separator | — | , |
(CSV formats) Column separator character. |
Executes custom JavaScript within the flow. Use it for calculations, data transformations, and logic that no built-in node covers.
| Field | Required | Default | Description |
|---|---|---|---|
| Code | ✅ | — | JavaScript code. Access flow variables via the variables object (e.g. return variables.x + variables.y;). Must return a value. |
| Output Variable | ✅ | — | Variable where the return value is stored. |
Security: Runs in a
vm.Scriptsandbox — no access toprocess,require, orglobal. 5-second execution timeout.
Controls a desktop application via a CLI bridge generated by the CLI Generator. Requires a linked MCP server from a published CLI generation.
| Field | Required | Default | Description |
|---|---|---|---|
| MCP Server | ✅ | — | CLI bridge MCP server (generated and published via CLI Generator). |
| App ID | ✅ | — | Identifier of the target application from the bridge config. |
| Actions | ✅ | — | List of actions to perform. Each has a Command and Parameters (supports {{variables}}). |
| Session Mode | — | new |
new — start a fresh session per run. reuse — reuse an existing session. |
| Output Variable | — | desktop_result |
Variable where the combined action results are stored. |
Tip: Use the CLI Generator at
/cli-generatorto wrap any CLI tool as an MCP server, then link that server here.
| Syntax | Example | Description |
|---|---|---|
| Simple | {{user_name}} |
Single variable |
| Dot notation | {{user.address.city}} |
Nested object path |
| Bracket notation | {{items[0]}} |
Array index |
| In URLs | https://api.example.com/{{id}} |
Embedded in strings |
| In JSON | {"name": "{{user_name}}"} |
Inside JSON bodies |
RAG (Retrieval-Augmented Generation)
Capture → KB Search → AI Response → Message
The Capture node saves the user's question, KB Search retrieves relevant context into {{kb_context}}, and AI Response generates an answer with that context auto-injected.
Intent-based Routing
Capture → AI Classify → [branch per category] → ...
AI Classify categorizes the input; connect edges labeled with each category name to separate sub-flows.
Human-in-the-Loop Approval
... → Human Approval → [approved branch] → Action Node
→ [rejected branch] → Message
The flow pauses until a human responds via the Approvals dashboard. Use it before irreversible actions.
Executes Python code in a sandboxed environment (Pyodide WASM in browser, Node.js subprocess on server).
| Field | Required | Default | Description |
|---|---|---|---|
| Code | ✅ | — | Python code to execute. Access flow variables via inputs dict. |
| Input Variables | — | — | Variables passed into the sandbox as inputs. |
| Output Variable | — | python_result |
Variable to store the return value. |
| Timeout (ms) | — | 5000 |
Max execution time before the node fails. |
Example: return inputs["items"].count(lambda x: x > 0)
Generates typed JSON output using an AI model with Zod schema validation. Guarantees the output matches the defined schema.
| Field | Required | Default | Description |
|---|---|---|---|
| Schema | ✅ | — | JSON Schema definition for the expected output shape. |
| Prompt | ✅ | — | Instructions for the AI to generate structured data. |
| Model | — | default | AI model to use for generation. |
| Output Variable | — | structured_result |
Variable to store the validated JSON object. |
Decomposes complex tasks using a powerful model, then routes sub-tasks to cheaper models based on complexity tier. Achieves 40-60% cost savings on multi-step workflows.
| Field | Required | Default | Description |
|---|---|---|---|
| Task | ✅ | — | High-level task description or {{variable}}. |
| Planner Model | — | powerful tier | Model used for task decomposition. |
| Max Steps | — | 10 |
Maximum sub-tasks to generate. |
| Output Variable | — | plan_result |
Variable with final aggregated output. |
Routes: completed → next node, failed → error branch.
Generates output, evaluates it against criteria, and retries with feedback until quality passes. Combines generation + evaluation + retry in one node.
| Field | Required | Default | Description |
|---|---|---|---|
| Prompt | ✅ | — | Generation instruction. |
| Evaluation Criteria | ✅ | — | Quality criteria for the evaluator model. |
| Passing Score | — | 7 |
Minimum score (0-10) to exit the loop. |
| Max Iterations | — | 5 |
Hard cap on retry attempts. |
| Executor Model | — | default | Model for generation. |
| Evaluator Model | — | default | Separate model for scoring (avoids self-bias). |
| Output Variable | — | loop_result |
Variable with final passing output. |
Routes: passed → success branch, failed → failure branch.
Evaluates multi-step agent reasoning trajectories for coherence, efficiency, and goal attainment. Used after complex agent workflows to score decision quality.
| Field | Required | Default | Description |
|---|---|---|---|
| Trajectory Variable | ✅ | — | Variable containing the step-by-step execution trace. |
| Evaluation Criteria | — | — | Custom scoring criteria. |
| Output Variable | — | trajectory_score |
Variable with score and reasoning. |
Splits traffic between two variants (A and B) for controlled experiments. Supports weighted routing and sticky assignment by conversation ID.
| Field | Required | Default | Description |
|---|---|---|---|
| Weight A (%) | — | 50 |
Percentage of traffic routed to variant A. |
| Weight B (%) | — | 50 |
Percentage of traffic routed to variant B. |
| Sticky | — | false |
When true, same conversation ID always gets same variant. |
Routes: A or B output handles.
Routes messages to different branches based on semantic similarity to intent labels. More flexible than keyword matching; uses embedding cosine similarity.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable containing the text to classify. |
| Routes | ✅ | — | List of intent labels; each becomes an output handle. |
| Threshold | — | 0.7 |
Minimum similarity score to match a route. |
| Default Handle | — | default |
Route taken when no intent exceeds the threshold. |
Executes a target node and retries it on failure with exponential backoff. Supports escalating context injection for SDLC pipelines — each retry adds richer feedback to guide the model toward a correct result.
| Field | Required | Default | Description |
|---|---|---|---|
| Target Node ID | ✅ | — | ID of the node to execute and retry (e.g. codegen). |
| Max Retries | — | 3 |
Maximum number of retry attempts after the initial failure. |
| Base Delay (ms) | — | 1000 |
Initial delay before first retry. |
| Backoff Multiplier | — | 2 |
Delay multiplier per attempt (exponential backoff). |
| Failure Variable | — | — | Variable to check for structured failure (e.g. sandboxResult). |
| Failure Values | — | ["FAIL","BLOCK"] |
Values of Failure Variable that trigger a retry. |
| Output Variable | — | — | Target node's output variable name (used for error tagging on exhaustion). |
| Escalating Context | |||
| Enable Escalation | — | off | When on, injects progressively richer context into the target node on each retry. |
| PR Gate Variable | — | gateResult |
Variable holding PR Gate review issues (injected on attempt 1+). |
| Sandbox Errors Variable | — | sandboxResult |
Variable holding sandbox failure details (injected on attempt 2+). |
| Project Context Variable | — | projectContext |
Variable holding project context loaded by project_context node. |
| Code Examples Variable | — | codeExamples |
Variable with few-shot code examples (injected on attempt 2+). |
Escalation logic:
- Attempt 1: injects PR Gate fix fields + project context into
__retry_escalationvariable - Attempt 2+: above + sandbox error details + code examples
- On exhaustion: sets output variable to
[Error: Failed after N attempts: ...]and stops flow (nextNodeId: null)
Example: sandbox_verify (failed) → retry (targetNodeId: "codegen", enableEscalation: true, maxRetries: 2)
Collects and merges outputs from multiple parallel branches. Waits for all branches to complete before proceeding.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variables | ✅ | — | Variables from each branch to collect. |
| Merge Strategy | — | array |
array (list), object (keyed map), concat (string join). |
| Output Variable | — | aggregated |
Variable with merged results. |
Searches the web using configured provider APIs (Google, Bing, Brave) and returns structured results.
| Field | Required | Default | Description |
|---|---|---|---|
| Query | ✅ | — | Search query string or {{variable}}. |
| Provider | — | brave |
Search provider: google, bing, brave. |
| Result Count | — | 5 |
Number of results to return. |
| Output Variable | — | search_results |
Variable with array of {title, url, snippet} objects. |
Generates and optionally stores vector embeddings for text. Used for semantic search pipelines and similarity computations.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable containing text to embed. |
| Model | — | text-embedding-3-small |
Embedding model to use. |
| Store in KB | — | false |
Whether to persist the embedding to the agent's knowledge base. |
| Output Variable | — | embedding_result |
Variable with the embedding vector. |
Stores and retrieves values from in-memory or Redis cache with configurable TTL. Reduces repeated API calls and speeds up repeated queries.
| Field | Required | Default | Description |
|---|---|---|---|
| Operation | ✅ | get |
get — read from cache, set — write to cache, delete — remove. |
| Cache Key | ✅ | — | Unique key string or {{variable}}. |
| Value Variable | — | — | Variable to store (for set), or variable to write result into (for get). |
| TTL (seconds) | — | 300 |
Time-to-live for cached values (set operations). |
Executes SQL or NoSQL queries against connected databases.
| Field | Required | Default | Description |
|---|---|---|---|
| Query | ✅ | — | SQL query or NoSQL operation. Supports {{variable}} interpolation. |
| Connection | ✅ | — | Database connection identifier configured in agent settings. |
| Output Variable | — | query_result |
Variable with query results as an array of objects. |
Reads and writes files in the agent's workspace (S3, Google Drive, or local storage).
| Field | Required | Default | Description |
|---|---|---|---|
| Operation | ✅ | read |
read, write, delete, list. |
| Path | ✅ | — | File path or {{variable}}. |
| Content Variable | — | — | Variable with content to write (write operations). |
| Output Variable | — | file_result |
Variable with file contents or operation result. |
Accepts image, audio, or file inputs from the user and makes them available as variables for downstream nodes.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Types | ✅ | — | Accepted types: image, audio, file. |
| Max Size (MB) | — | 10 |
Maximum file size. |
| Output Variable | — | media_input |
Variable with the uploaded content (base64 or URL). |
Generates images via provider APIs (DALL-E, Stable Diffusion/Flux via Fal.ai).
| Field | Required | Default | Description |
|---|---|---|---|
| Prompt | ✅ | — | Image description. Supports {{variables}}. |
| Provider | — | dall-e |
dall-e (OpenAI) or fal-ai (Stable Diffusion, Flux). |
| Size | — | 1024x1024 |
Output image dimensions. |
| Output Variable | — | image_url |
Variable with the generated image URL. |
Converts text to speech (TTS) or speech to text (STT).
| Field | Required | Default | Description |
|---|---|---|---|
| Mode | ✅ | tts |
tts — text to speech, stt — speech to text. |
| Input Variable | ✅ | — | Variable with text (TTS) or audio data (STT). |
| Voice | — | alloy |
Voice preset (TTS only). |
| Output Variable | — | audio_result |
Variable with audio URL (TTS) or transcribed text (STT). |
Applies content moderation, PII detection, and prompt injection defense to any input or output in the flow.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable to inspect. |
| Check Content | — | true |
Enable content moderation (hate speech, violence, etc.). |
| Check PII | — | true |
Enable PII detection and optional redaction. |
| Check Injection | — | true |
Enable prompt injection detection. |
| On Violation | — | block |
block — stop flow, redact — sanitize and continue. |
| Output Variable | — | guardrails_result |
Variable with sanitized content and violation report. |
Routes: safe → continue, blocked → violation branch.
Tracks token usage and spend per agent. Triggers alerts or adaptive model downgrade when budget thresholds are reached.
| Field | Required | Default | Description |
|---|---|---|---|
| Budget (USD) | — | — | Total spend limit to enforce. |
| Alert at (%) | — | 80 |
Percentage of budget that triggers an alert. |
| Mode | — | monitor |
monitor — alert only, adaptive — auto-downgrade model tier at 60%/80%/95%. |
| Output Variable | — | cost_data |
Variable with {inputTokens, outputTokens, spend}. |
Executes long-running MCP tasks with progress tracking. Unlike the MCP Tool node (synchronous), this node supports streaming progress updates.
| Field | Required | Default | Description |
|---|---|---|---|
| MCP Server | ✅ | — | Linked MCP server to invoke. |
| Tool Name | ✅ | — | Tool to call on the MCP server. |
| Input Mapping | — | — | Map flow variables to tool input parameters. |
| Output Variable | — | task_result |
Variable with the final tool output. |
| Timeout (ms) | — | 30000 |
Maximum wait time for task completion. |
Runs a set of deterministic checks against generated artifacts (build, lint, tests). Routes to passed or failed based on results. Unlike sandbox_verify (which works on CodeGenOutput objects), this node runs arbitrary shell commands.
| Field | Required | Default | Description |
|---|---|---|---|
| Checks | ✅ | — | List of checks to run. Each has: type (build/lint/test), command (shell cmd), label (display name). |
| Output Variable | — | verificationResults |
Variable with structured results: { passed, failed, details[] }. |
Routes: passed → all checks passed, failed → at least one check failed.
Applies structural code transformations using AST (Abstract Syntax Tree) analysis via @ast-grep/napi. Use it for automated refactoring, pattern detection, and code normalization at the syntax level.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | — | Variable holding the source code string to transform. |
| Pattern | ✅ | — | AST pattern to match (ast-grep syntax). |
| Replacement | — | — | Replacement template. Omit to use as a detector only. |
| Language | — | typescript |
Source language: typescript, javascript, python, go, rust. |
| Output Variable | — | transformResult |
Variable with { transformed, matchCount, code }. |
Queries a Language Server Protocol (LSP) endpoint for semantic code intelligence: hover info, go-to-definition, find-references, diagnostics. Use it in code analysis pipelines to provide AI agents with accurate type and symbol information.
| Field | Required | Default | Description |
|---|---|---|---|
| LSP Server URL | ✅ | — | URL of the LSP server (e.g. http://localhost:2089). |
| Query Type | ✅ | — | Operation: hover, definition, references, diagnostics, completion. |
| File Path | ✅ | — | Repository-relative path of the file to query (e.g. src/lib/auth.ts). |
| Line | — | — | 0-based line number for positional queries. |
| Character | — | — | 0-based character offset for positional queries. |
| Output Variable | — | lspResult |
Variable with the LSP response payload. |
Spawns multiple parallel agent instances that share a scratchpad and collectively solve a task. Agents can read/write to shared state, delegate to each other, and self-organize. Experimental — use for research or batch processing tasks that benefit from collective intelligence.
| Field | Required | Default | Description |
|---|---|---|---|
| Agent Count | — | 3 |
Number of parallel agent instances to spawn. |
| Task Prompt | ✅ | — | The task description shared with all agents. Supports {{variables}}. |
| Shared Variables | — | — | Variables made available to all agents in the swarm's shared context. |
| Max Rounds | — | 5 |
Maximum coordination rounds between agents. |
| Output Variable | — | swarmResult |
Variable with the synthesized final answer. |
Executes Python code in an isolated sandbox and returns the result. Use it for data analysis, mathematical computations, and custom scripting that would be unreliable if delegated to an LLM.
| Field | Required | Default | Description |
|---|---|---|---|
| Code | ✅ | — | Python code to execute. Supports {{variables}} interpolation. |
| Input Variables | — | — | Variables injected into the sandbox's scope before execution. |
| Output Variable | — | codeResult |
Variable with stdout output and any returned value. |
| Timeout (ms) | — | 10000 |
Maximum execution time before kill. |
Runs in a separate process with no network access and read-only filesystem.
pandas,numpy, andjsonare pre-installed.
Reads files from the project directory and injects their content into a flow variable. Place at the start of any pipeline to give downstream agents awareness of coding conventions, rules, and CLAUDE.md instructions.
| Field | Required | Default | Description |
|---|---|---|---|
| Context Files | — | ["CLAUDE.md"] |
Glob patterns or exact paths to load (e.g. ["CLAUDE.md", ".claude/rules/*.md"]). |
| Example Files | — | — | Additional files loaded as fenced code blocks (e.g. reference implementations). |
| Context Label | — | Project Context |
Human-readable label for the loaded context. |
| Max Tokens | — | 4000 |
Truncation limit. Loaded content is trimmed to this many tokens. |
| Output Variable | — | projectContext |
Variable with the concatenated file contents. |
Typical use: First node in SDLC and DevSecOps pipelines — ensures Code Gen, Review, and Retry agents all see project conventions.
Runs deterministic quality checks on generated code before it reaches the PR Gate. Catches TypeScript errors, ESLint violations, and forbidden patterns (e.g. @prisma/client, any types, console.log) without spending AI tokens.
| Field | Required | Default | Description |
|---|---|---|---|
| Input Variable | ✅ | generatedCode |
Variable holding a CodeGenOutput JSON object (with a files array). |
| Checks | — | ["forbidden_patterns"] |
Which checks to run: typecheck, lint, forbidden_patterns. |
| Forbidden Patterns | — | Built-in set | Extra regex patterns to flag as failures. |
| Input Schema | — | — | Optional named schema (e.g. CodeGenOutput) to validate the input before running checks. |
| Output Variable | — | sandboxResult |
Variable with PASS or FAIL: <details>. |
Routes: passed → next node on success, failed → retry or failure branch.
Built-in forbidden patterns:
@prisma/client— use@/generated/prismainstead: any— noanytypes allowedconsole.log/warn/error— useloggerfrom@/lib/logger