n8n AI Agent Error Handling
AI agents fail differently than traditional automations: LLM hallucinations, token limits, tool timeouts, rate limits, and context window overflows. n8n provides powerful error handling tools to catch, diagnose, and recover from these failures. This guide covers everything from basic retries to advanced resilience patterns.
Understanding n8n Error Types
n8n categorizes errors at the workflow and node level:
| Error Category | n8n Classification | Common in AI Agents |
|---|---|---|
| **Node Error** | Module fails execution | LLM timeout, tool failure, JSON parse error |
| **Workflow Error** | Uncaught error stops workflow | Unhandled node error, max retries exceeded |
| **Validation Error** | Input/output schema mismatch | Invalid JSON from LLM, missing required fields |
| **Rate Limit Error** | External API returns 429 | OpenAI/Anthropic rate limits, vector store limits |
| **Timeout Error** | Node exceeds time limit | LLM streaming timeout, slow tool response |
| **Memory Error** | Context window exceeded | Token limit, conversation history too long |
Error Handling Architecture in n8n
n8n provides three layers of error handling:
1. Node-Level Error Handling
Each node has built-in error handling options:
- Continue On Fail - Continue workflow even if node fails
- Retry On Fail - Automatic retries with configurable attempts/delay
- Error Trigger - Separate workflow triggered on failure
2. Workflow-Level Error Handling
- Error Workflow - Dedicated workflow triggered on any unhandled error
- Error Trigger Node - Start workflows on errors from other workflows
3. Global Error Handling
- Error Workflow setting in workflow settings
- Global error workflow for all workflows (Enterprise)
Setting Up Node-Level Error Handling
Continue On Fail
Enable on any node to prevent workflow stop:
1. Click node - Settings tab 2. Enable Continue On Fail 3. Failed node outputs error data to next node 4. Use IF node to branch on success/failure
// Failure branch {{ !!$json.error }} ```
Retry On Fail
Built-in retry with exponential backoff:
1. Node Settings - Retry On Fail 2. Configure: - Max Attempts: 3 (default) - Wait Between Retries: 5 seconds (default) - Exponential Backoff: Enabled 3. Works for: HTTP Request, AI Agent, Database, custom nodes
Best for: Transient failures (rate limits, network blips, temporary timeouts)
Error Trigger Workflows
Create dedicated error handling workflows:
1. Create Error Workflow
1. New Workflow - Name: "Error Handler - AI Agents" 2. Add Error Trigger node 3. Configure to catch errors from specific workflows or all
2. Error Trigger Configuration
// Error Trigger settings
{
"workflowIds": ["workflow-id-1", "workflow-id-2"], // or empty for all
"errorTypes": ["NodeError", "WorkflowError", "ValidationError"],
"includeExecutionData": true
}
3. Error Handling Actions
Connect error trigger to recovery actions:
Error Trigger
+
IF (error.type === 'RateLimit')
+ YES - Sleep (60s) - Retry Original Node
+ NO - IF (error.type === 'Authentication')
+ YES - Refresh Token - Retry
+ NO - Alert Slack - Create Incident Ticket
AI Agent-Specific Error Patterns
1. LLM Rate Limit (429) Handling
AI Agent Node
+ (Rate Limit Error)
Error Handler
+
Sleep (exponential: 2^attempt * 60s)
+
Retry AI Agent (max 3 attempts)
+
IF (still failing) - Alert Slack - Fallback Response
n8n Implementation: 1. Enable Retry On Fail on AI Agent node (3 attempts, exponential) 2. Add Error Trigger workflow for persistent failures 3. Alert via Slack/Email with error details
2. Token Limit / Context Window Overflow
Error: 400 This model's maximum context length is X tokens
Fix:
1. Reduce chunkSize in RAG ingestion
2. Reduce topK in vector search
3. Use Summary Memory instead of Window Buffer
4. Add Summarization step before agent
IF (error.message.includes('context length'))
+
Summarize Context (LLM Chain)
+
Retry AI Agent with summarized context
3. Tool/Function Calling Errors
Error: AI agent tries to call tool, tool fails
Common causes: - Invalid parameters from LLM - Tool API changed - Authentication expired
Fix: 1. Add Schema Validation before tool execution 2. Wrap tool calls in Try/Catch (Code node) 3. Fallback to default response
// Code node wrapper for tool calls
try {
const result = await $node['Tool'].execute(input);
return { success: true, data: result };
} catch (error) {
return {
success: false,
error: error.message,
fallback: "I couldn't retrieve that information right now."
};
}
4. JSON Parse Errors from LLM
Error: LLM returns invalid JSON
Fix: 1. Use Structured Output (OpenAI Functions, Anthropic Tools) 2. Add JSON Parse node with fallback 3. Retry with stricter prompt
AI Agent (with Functions/Tools)
+
IF (parse fails)
+ Retry with stricter prompt (max 2 retries)
+ Fallback: structured default response
5. Vector Store / Retrieval Errors
Error: Vector store timeout, dimension mismatch, empty results
Fix: 1. Validate embedding dimensions match index (1536 vs 3072) 2. Set Score Threshold (0.7-0.8) to filter noise 3. Fallback to keyword search if vector search fails 4. Cache frequent queries
Advanced: Error Workflow Patterns
Pattern 1: Dead Letter Queue
Store failed executions for later replay:
Error Trigger
+
Google Sheets / Airtable / PostgreSQL
+ (Log: timestamp, workflow, error, input data, stack trace)
+
Slack Alert (with link to replay)
Pattern 2: Automatic Retry with Circuit Breaker
Error Trigger
+
Get/Set Variable (failure count per workflow)
+
IF (count < 3)
+ YES - Increment counter - Retry workflow (Execute Workflow node)
+ NO - Reset counter after 1 hour - Alert on-call
Pattern 3: Graceful Degradation
AI Agent (Primary)
+ (Error)
Fallback Agent (Simpler prompt, cheaper model)
+ (Error)
Static Response + Human Escalation
Pattern 4: Circuit Breaker Pattern
Prevent cascade failures:
function checkCircuitBreaker(service) { const state = CB_STATE[service] || { failures: 0, lastFailure: 0, open: false }; const now = Date.now(); // Reset if last failure > 5 min ago if (now - state.lastFailure > 300000) { state.failures = 0; state.open = false; } if (state.open) { return { allow: false, reason: 'Circuit breaker open' }; } return { allow: true, state }; }
function recordFailure(service) { const state = CB_STATE[service] || { failures: 0, lastFailure: 0, open: false }; state.failures++; state.lastFailure = Date.now(); if (state.failures >= 5) state.open = true; CB_STATE[service] = state; }
function recordSuccess(service) { CB_STATE[service] = { failures: 0, lastFailure: 0, open: false }; } ```
Alerting & Monitoring
Slack Alert Template
{
"blocks": [
{"type": "header", "text": {"type": "plain_text", "text": "⚠️ n8n AI Agent Error"}},
{"type": "section", "fields": [
{"type": "mrkdwn", "text": "*Workflow:* {{ $workflow.name }"},
{"type": "mrkdwn", "text": "*Error:* {{ $error.message }"},
{"type": "mrkdwn", "text": "*Module:* {{ $error.module }"},
{"type": "mrkdwn", "text": "*Time:* {{ $now }"}
]},
{"type": "section", "text": {"type": "mrkdwn", "text": "Email Alert
Workflow: {{ $workflow.name }} Error: {{ $error.message }} Module: {{ $error.module }} Time: {{ $now }}
Input Data: {{ JSON.stringify($error.bundle, null, 2) }}
Stack Trace: {{ $error.stack }}
View Execution ```
Dashboard Monitoring
1. Error Log Table (Google Sheets / Airtable / PostgreSQL) 2. Metrics: Error rate, MTTR, common error types, affected workflows 3. Tools: Google Data Studio, Metabase, Grafana
Debugging AI Agent Failures
Execution Log Analysis
1. Go to Executions - Filter by Error 2. Click failed execution - Click red ! on failed module 3. Inspect: - Input (what went in) - Output (error details) - Settings (configuration)
Debug Panel
1. Open workflow editor 2. Click Run Once 3. Click each module to see Input/Output 4. For AI Agent: check Prompt, Context, Output 4. For Vector Store: check Query, Results, Scores
Common AI Agent Failure Patterns
| Symptom | Likely Cause | Debug Step |
|---|---|---|
| Empty response | Token limit, empty context | Check context length, token usage |
| Hallucination | Low temperature, no context | Add context, lower temp, add citations |
| Tool call fails | Bad params, auth expired | Check tool input schema, credentials |
| Slow response | Large context, slow model | Reduce context, use faster model |
| Rate limited | Too many parallel runs | Add queue, reduce concurrency |
Best Practices Checklist
Before Deploy - [ ] Every external call has retry + fallback - [ ] Error workflow configured for all production workflows - [ ] Alerting configured (Slack + Email) - [ ] Dead letter queue for failed executions - [ ] Idempotency keys on all create operations - [ ] Rate limiting respected (sleep, batching) - [ ] Secrets in credential store, not workflow - [ ] Documentation + runbook for common failures
Ongoing - [ ] Weekly error rate review - [ ] Monthly cost + error correlation - [ ] Quarterly disaster recovery drill - [ ] Update error handling as platforms change
Related Guides
- Make.com Error Handling Tutorial - Make.com error patterns
- n8n AI Agent Node Tutorial - AI Agent basics
- n8n AI Agent Memory Setup - Memory configuration
- n8n RAG Agent Tutorial - RAG-specific error patterns