Workflows | Render
Long-running jobs for apps and agents
Deploy reliable application logic and parallel workloads without managing queues, worker pools, or custom retry logic.
A better way to build reliable AI agents
const agentLoop = task({ name: 'agentLoop' },
async (ctx: TaskContext, userInput: string, conversationContext: object) => {
const actions = await callLlm(userInput, conversationContext)
// Chain a task run for each planned action, in parallel
const results = await Promise.all(
actions.map((action) => ctx.run(execute, action))
)
// Combine results into a coherent response
return await ctx.run(synthesize, userInput, results)
}
)
const execute = task({ name: 'execute' },
(_ctx: TaskContext, action: { name: string }) => {
const handler = getHandler(action.name)
return { action: action.name, result: handler(action) }
}
)
const synthesize = task({ name: 'synthesize' }, ...)
Turn functions into composable, async tasks
Define tasks and logic in code
Make any function an async task that runs in its own ephemeral container.
Retry failed task runs automatically
Configure retry behavior for each task to handle transient failures automatically.
Checkpoint state (coming soon)
Make crashes inconsequential by resuming workflows right where they left off.
Scale without managing queues or workers
Sub-second start times
Render starts task compute in milliseconds to keep your experiences responsive.
Massively parallel task runs
Use up to 10,000 CPUs per workflow, without managing worker pools or standing up queuing systems.
High-spec task compute
Run compute-intensive tasks on larger compute plans for up to 24 hours.
Observability & debugging
Every task. Every run. Full visibility.
See a unified history of active, queued, and completed task runs.
Analyze performance and reliability across time spans.
Inspect runs to optimize and debug.