n8n-errors-execution — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited n8n-errors-execution (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Mechanism | Scope | Purpose | Configuration |
|---|---|---|---|
| Error Workflow | Workflow-level | Catch any unhandled failure, notify/recover | Workflow Settings > Error Workflow |
| continueOnFail | Per-node | Allow workflow to continue despite node failure | Node Settings > Continue On Fail |
| Retry on Fail | Per-node | Automatically retry transient failures | Node Settings > Retry On Fail |
| Stop And Error | Explicit node | Deliberately fail workflow with custom message | Add Stop And Error node |
Workflow execution fails
├── Is the failure transient (API timeout, rate limit)?
│ ├── YES → Enable Retry on Fail on that node
│ │ Config: maxTries=3, waitBetweenTries=1000ms
│ │ └── Still fails after retries? → Falls to Error Workflow
│ └── NO → Continue below
├── Should the workflow continue despite this node failing?
│ ├── YES → Enable continueOnFail on that node
│ │ └── Check $json.error in next node for fallback logic
│ └── NO → Continue below
├── Is this a business logic validation failure?
│ ├── YES → Use Stop And Error node to fail explicitly
│ │ └── Error Workflow receives the custom error message
│ └── NO → Continue below
└── Unhandled failure
└── ALWAYS configure an Error Workflow to catch it
└── Error Trigger → Slack/Email/Database notificationWhen: ALWAYS set up as a safety net for every production workflow.
Main Workflow → (fails) → Error Trigger → Slack/Email notificationSetup:
When: The failing node is non-critical and a fallback value is acceptable.
HTTP Request (continueOnFail=true) → IF ($json.error) → Fallback path
→ Success path$json.error instead of normal outputWhen: The node calls an external API that may have transient failures.
API Call (retryOnFail=true, maxTries=3) → (still fails) → Error WorkflowWhen: Custom validation detects invalid data that MUST stop execution.
IF (invalid data) → Stop And Error → triggers Error Workflow| Symptom | Cause | Fix |
|---|---|---|
| Workflow stops at node with red X | Node threw unhandled error | Enable continueOnFail OR fix the node config |
| "Workflow could not be started" | Trigger node misconfigured or credentials invalid | Check trigger node settings and credential validity |
| Workflow hangs indefinitely | No execution timeout configured | Set EXECUTIONS_TIMEOUT env var or per-workflow timeout |
| Error workflow never fires | Error workflow not assigned in Workflow Settings | Open Workflow Settings > select Error Workflow |
| Error workflow fires but no data | Error Trigger node missing in error workflow | ALWAYS start error workflow with Error Trigger node |
| Node retries but still fails | Transient issue persists beyond max retries | Increase maxTries or waitBetweenTries; check upstream service |
$json.error is undefined | continueOnFail not enabled on the failing node | Enable Continue On Fail in node Settings |
| Execution timeout reached | Workflow exceeds configured timeout limit | Increase EXECUTIONS_TIMEOUT or optimize workflow |
| "Workflow was stopped manually" | User or API stopped execution | Check execution logs; verify no automated stop triggers |
| Node shows "No input data" | Previous node produced empty output | Add IF node to check for empty data before processing |
| Credentials error on active workflow | Credentials expired or were deleted | Re-authenticate credentials; check credential sharing |
| Sub-workflow execution fails | Caller policy blocks execution | Set N8N_WORKFLOW_CALLER_POLICY_DEFAULT_OPTION correctly |
The Error Trigger node receives this data when an error workflow fires:
{
"execution": {
"id": "231",
"url": "https://n8n.example.com/execution/231",
"retryOf": null,
"error": {
"message": "The error message",
"stack": "Error stack trace..."
},
"lastNodeExecuted": "HTTP Request",
"mode": "trigger"
},
"workflow": {
"id": "1",
"name": "My Workflow"
}
}Key fields:
execution.error.message — The actual error descriptionexecution.lastNodeExecuted — Which node failedexecution.id — Link back to the failed execution for inspectionworkflow.name — Which workflow triggered the error| Level | Setting | Default | Description |
|---|---|---|---|
| Instance-wide | EXECUTIONS_TIMEOUT | -1 (disabled) | Default timeout for ALL workflows (seconds) |
| Instance max | EXECUTIONS_TIMEOUT_MAX | 3600 | Maximum timeout any workflow can set (seconds) |
| Per-workflow | Workflow Settings > Timeout | Inherits instance default | Override for specific workflow |
ALWAYS set EXECUTIONS_TIMEOUT in production to prevent runaway executions.
$json?.field optional chaining.N8N_PAYLOAD_SIZE_MAX (default 16MB). Reduce payload or increase limit.N8N_RUNNERS_TASK_TIMEOUT.EXECUTIONS_TIMEOUT in production environments~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.