I run n8n for client work and the failure that costs me the most is never the red execution. It is the green one that did nothing: a token expired, a field got renamed upstream, a filter stopped matching, and every node is green with zero rows written. Several threads here in the last month are about exactly that, so I wrote a small static checker for the things you can see in the workflow JSON before it ever runs, and then pointed it at the template library to see how common the gaps are.
The 400 most-viewed public templates (pulled through the public template API this week):
| HTTP Request nodes | 628. 20 have Retry On Fail (3%). 8 have a timeout (1%). |
| Webhook triggers | 67. 2 use any authentication. |
| Templates that include settings | 205. 142 (69%) have no error workflow set. |
| AI Agent nodes | 248. In 67 templates the agent’s output goes straight to the next node with no check and no error branch. |
| IF / Switch with an unconnected branch | 22% of templates. Items that take that branch just vanish. |
| Nodes on Continue On Fail with nothing downstream looking at the error | 8% of templates. |
Templates are starting points, not production, so none of that is a dig at the authors. It is a measure of how much hardening sits between “works in the editor” and “runs for a client for a year”.
The checker is n8n-workflow-lint. No install, no signup, nothing leaves your machine:
npx github:tachyurgy/n8n-workflow-lint my-workflow.json
It prints a score out of 100 and a list like this:
ERROR no-error-workflow settings.errorWorkflow is not set
ERROR agent-unguarded @ "Qualify lead" agent has 3 tool(s) and its output goes straight to "Update CRM"
WARN http-no-retry @ "Enrich company" retryOnFail is off
WARN dead-end-branch @ "Is qualified?" false branch is not connected
INFO unasserted-write @ "Update CRM" terminal write node; nothing checks what it did
15 rules. Each one has a why, a fix, and a link to the thread on this forum where somebody lost days to it (--rules prints them). It also takes --min-score 75 so it can sit in CI if you keep exported workflows in git.
Two honest limits. It is static, so it can tell you where a workflow can fail quietly, not that it is; the runtime half is a separate set of importable workflows I will post in Built with n8n. And a couple of the rules are opinions (a workflow ending on a write with no post-condition is an info, not a crime); --ignore exists.
Repo: GitHub - tachyurgy/n8n-workflow-lint: Static production-readiness checks for n8n workflow JSON: silent-failure traps, missing retries/timeouts, swallowed errors, unguarded AI agents, leaked secrets. · GitHub
Write-up with the method: The green run that did nothing — open-source n8n reliability tooling | Levelbrook
If it fires on something you did on purpose, I would like the export. The goal is that every finding is something a senior engineer would actually flag in review.