The Function block executes custom JavaScript or TypeScript code in your workflows. Transform data, perform calculations, or implement custom logic.

Outputs
<function.result>: The value returned from your function<function.stdout>: Console.log() output from your code
Example Use Cases
Data Processing Pipeline - Transform API response into structured data
API (Fetch) → Function (Process & Validate) → Function (Calculate Metrics) → ResponseBusiness Logic Implementation - Calculate loyalty scores and tiers
Agent (Get History) → Function (Calculate Score) → Function (Determine Tier) → Condition (Route)Data Validation and Sanitization - Validate and clean user input
Input → Function (Validate & Sanitize) → API (Save to Database)Example: Loyalty Score Calculator
// Process customer data and calculate loyalty score
const { purchaseHistory, accountAge, supportTickets } = <agent>;
// Calculate metrics
const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0);
const purchaseFrequency = purchaseHistory.length / (accountAge / 365);
const ticketRatio = supportTickets.resolved / supportTickets.total;
// Calculate loyalty score (0-100)
const spendScore = Math.min(totalSpent / 1000 * 30, 30);
const frequencyScore = Math.min(purchaseFrequency * 20, 40);
const supportScore = ticketRatio * 30;
const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore);
return {
customer: <agent.name>,
loyaltyScore,
loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver",
metrics: { spendScore, frequencyScore, supportScore }
};Best Practices
- Keep functions focused: Write functions that do one thing well to improve maintainability and debugging
- Handle errors gracefully: Use try/catch blocks to handle potential errors and provide meaningful error messages
- Test edge cases: Ensure your code handles unusual inputs, null values, and boundary conditions correctly
- Optimize for performance: Be mindful of computational complexity and memory usage for large datasets
- Use console.log() for debugging: Leverage stdout output to debug and monitor function execution
Common Questions
The Function block supports JavaScript and Python. JavaScript is the default. Python support requires the E2B feature to be enabled, as Python code always runs in a secure E2B sandbox environment.
JavaScript code without external imports runs in a local isolated VM for fast execution. JavaScript code that uses import or require statements requires E2B and runs in a secure sandbox. Python code always runs in the E2B sandbox regardless of whether it has imports.
Use the angle bracket syntax directly in your code, like <agent.content> or <api.data>. Do not wrap these references in quotes — the system replaces them with actual values before execution. For environment variables, use double curly braces: {{API_KEY}}.
The Function block has two outputs: result (the return value of your code, accessed via <function.result>) and stdout (anything logged with console.log(), accessed via <function.stdout>). Make sure your code includes a return statement if you need to pass data to downstream blocks.
Yes. The fetch() API is available in the JavaScript execution environment. You can use async/await with fetch to call external APIs. However, you cannot use libraries like axios or request — only the built-in fetch is supported. Your code runs inside an async context automatically, so you can use await directly.
Yes. Function blocks have a configurable execution timeout. If your code exceeds the timeout, the execution is terminated and the block reports an error. Keep this in mind when making external API calls or processing large datasets.