n8n-validation-expert
Skill4 starsChanged 5 months agoMITView on GitHub
Interpret validation errors and guide fixing them. Use when encountering validation errors, validation warnings, false positives, operator structure issues, or need help understanding validation results. Also use when asking about validation profiles, error types, or the validation loop process.
22 other projects use a version of this, 16 of them edited.
Adopted by
Most recently taken up by
- delorenj/skillsedited, first seen Nov 7, 2026
- Mfrostbutter/n8n-workflow-harnessedited, first seen Nov 1, 2026
- WilkoMarketing/antigravity-n8n-skillsedited, first seen Oct 6, 2026
- nomdedev/agent-manager-templateedited, first seen Sep 30, 2026
- jawwad-ali/claude-code-skillsedited, first seen Sep 5, 2026
- czlonkowski/n8n-skillsedited, first seen Aug 29, 2026
Used with
Projects with it also use n8n-code-tool, n8n-multi-instance and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
czlonkowskiSkilln8n-code-tool
Write JavaScript or Python for the n8n Custom Code Tool (@n8n/n8n-nodes-langchain.toolCode) — the AI-agent-callable tool, NOT the workflow Code node. Use when building a Code Tool attached to an AI Agent, writing code that an LLM will invoke, parsing the `query` input, returning a string result, defining an input schema for structured arguments (specifyInputSchema, jsonSchemaExample, DynamicStructuredTool), or troubleshooting errors like \"Wrong output type returned\", \"No execution data available\", \"The response property should be a string, but it is an object\", \"Cannot assign to read only property 'name'\", or an AI agent that refuses to call the tool. Covers the critical differences between Code node and Code Tool: return format (string vs `[{json:{...}}]`), unavailability of `$fromAI`/`$input`/`$helpers` in the Code Tool sandbox, naming rules for AI invocation, and when to use `toolWorkflow`/HTTP Request Tool instead.
Also in 3 projects that use this
czlonkowskiSkilln8n-multi-instance
Use when an n8n-mcp account targets more than one n8n instance — i.e. the `n8n_instances` tool is available, the user mentions multiple n8n instances or environments (prod vs staging, several teams or clients), several agents or chats work on one account in parallel, a workflow / datatable / credential / execution call returns an unexpected NOT_FOUND or reads data you don't recognize, or a call is refused with `INSTANCE_AMBIGUOUS` or `INSTANCE_NOT_FOUND`. Covers naming the target instance on each call with the `instance` argument, setting the default with `switch`, verifying the target before high-stakes work — credential writes above all — and recovering from misroutes and fail-closes. Always consult this skill before operating on a specific instance, before any credential create/update/delete on a multi-instance account, or when a call hits the wrong/empty data or an instance error.
Also in 3 projects that use this
tmolaviSkilln8n-agents
Use when building n8n AI Agent / LangChain clusters — tools, memory, RAG, structured output, system prompts, sub-workflow-as-tool, or fixing agent connection topology (ai_languageModel, ai_tool, ai_memory).
Also in 3 projects that use this
tmolaviSkilln8n-error-handling
Use for production n8n workflows, webhook APIs, retries, error outputs, error workflows, dead-letter patterns, and correct HTTP response status shapes for callers.
Also in 3 projects that use this
silvainfmSkillmarketing-ideas
When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product. Also use when the user asks for 'marketing ideas,' 'growth ideas,' 'how to market,' 'marketing strategies,' 'marketing tactics,' 'ways to promote,' or 'ideas to grow.' This skill provides 140 proven marketing approaches organized by category.
Also in 3 projects that use this
silvainfmSkillpricing-strategy
When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' or 'monetization.' This skill covers pricing research, tier structure, and packaging strategy.
Also in 3 projects that use this
- +3 more from czlonkowski
- +1 more from tmolavi
Other versions22 projects use a version of this.
Word for word · 4
- leadgenjay/claude-skills★ 22100% same
- promptadvisers/n8n-powerhouse★ 9100% same
- JosBen74/claude-skills★ 0100% same
- refineryconnect/n8n-powerhouse★ 0100% same
Edited · 16
- czlonkowski/n8n-skills★ 6.5k26% same
- WilkoMarketing/antigravity-n8n-skills★ 10626% same
- delorenj/skills★ 1752% same
- eugenepyvovarov/mcpbundler-agent-skills-marketplace★ 1298% same
- CarbeneAI/Forge★ 998% same
- reachmeshailesh-boop/codex-skill-pack★ 998% same
- jawwad-ali/claude-code-skills★ 498% same
- computer-agents/skills★ 298% same
- nomdedev/agent-manager-template★ 226% same
- Wagner-Emden-IT-Services/n8n-project-template★ 175% same
6 more not listed
Wrote their own version · 2
- walidboulanouar/n8n-claude-code-template★ 19same name
- tygwan/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository40 other files it gives its agents.
- academic-paper-reviewerSkill
- academic-paperSkill
- academic-pipelineSkill
- brandkitSkill
- industrial-brutalist-uiSkill
- chinese-novelistSkill
- claude-verifierSkill
- deep-researchSkill
- find-skillsSkill
- generate-imageSkill
- gpt-tasteSkill
- imagegen-frontend-mobileSkill
- imagegen-frontend-webSkill
- image-to-codeSkill
- infographicsSkill
- md-to-pptxSkill
- minimalist-uiSkill
- n8n-code-javascriptSkill
- n8n-code-pythonSkill
- n8n-expression-syntaxSkill
- n8n-mcp-tools-expertSkill
- n8n-node-configurationSkill
- n8n-workflow-patternsSkill
- full-output-enforcementSkill
- page-agentSkill
- pptx-postersSkill
- pptxSkill
- redesign-existing-projectsSkill
- remotion-best-practicesSkill
- scientific-slidesSkill
- skill-creatorSkill
- skill-evolutionSkill
- skill-factorySkill
- skill-lookupSkill
- skill-managerSkill
- skill-writerSkill
- high-end-visual-designSkill
- stitch-design-tasteSkill
- design-taste-frontendSkill
- design-taste-frontend-v1Skill
The file
Show its rules and text
We split this skill into the rules it gives an agent
32 rules. 23 are common, 0 are distinctive, and 9 are very specific to this project.
23
Common
Most of the 18 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 28
Blocks workflow execution: - Must be resolved before activation
- Common: line 133
This is normal!: Don't be discouraged by multiple iterations.
- Very specific: line 196
Use get_node_essentials to see required fields
- Common: line 197
Add the missing field to your configuration
- Common: line 217
Check error message for allowed values
- Very specific: line 218
Use get_node_essentials to see options
- Common: line 219
Update to a valid value
- Common: line 239
Check expected type in error message
- Common: line 260
Use n8n Expression Syntax skill
- Very specific: line 261
Check for missing {{}} or typos
- Common: line 262
Verify node/field references
- Common: line 282
Check node name spelling
- Common: line 283
Verify node exists in workflow
- Common: line 284
Update reference to correct name
- Very specific: line 368
Solution: Use cleanStaleConnections operation in n8n_update_partial_workflow
- Common: line 373
Solution: Add missing connections or remove extra rules
- Common: line 390
Warning: No error handling configured
- Common: line 410
Warning: No rate limiting for API calls
- Common: line 522
Connections: - No broken references
- Common: line 551
Fix: Remove stale connection or create missing node
- Common: line 569
Fix: Remove extra triggers or split into separate workflows
- Common: line 589
Create minimal valid configuration
- Common: line 597
Remove half the nodes
- Common: line 599
If works: problem is in removed nodes
- Common: line 600
If fails: problem is in remaining nodes
- Common: line 640
Read error messages completely
- Very specific: line 642
Use runtime profile for pre-deployment
- Very specific: line 643
Check valid field before assuming success
- Very specific: line 645
Use get_node_essentials when unclear about requirements
- Common: line 646
Document false positives you accept
- Very specific: line 653
Use strict profile during development (too noisy)
- Very specific: line 666
[FALSE_POSITIVES.md](FALSE_POSITIVES.md): - When warnings are acceptable
“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
n8n Validation Expert
Expert guide for interpreting and fixing n8n validation errors.
Validation Philosophy
Validate early, validate often
Validation is typically iterative:
- Expect validation feedback loops
- Usually 2-3 validate → fix cycles
- Average: 23s thinking about errors, 58s fixing them
Key insight: Validation is an iterative process, not one-shot!
Error Severity Levels
1. Errors (Must Fix)
Blocks workflow execution - Must be resolved before activation
Types:
missing_required- Required field not providedinvalid_value- Value doesn't match allowed optionstype_mismatch- Wrong data type (string instead of number)invalid_reference- Referenced node doesn't existinvalid_expression- Expression syntax error
Example:
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces, 1-80 characters)"
}2. Warnings (Should Fix)
Doesn't block execution - Workflow can be activated but may have issues
Types:
best_practice- Recommended but not requireddeprecated- Using old API/featureperformance- Potential performance issue
Example:
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput' with retryOnFail"
}3. Suggestions (Optional)
Nice to have - Improvements that could enhance workflow
Types:
optimization- Could be more efficientalternative- Better way to achieve same result
The Validation Loop
Pattern from Telemetry
7,841 occurrences of this pattern:
1. Configure node
↓
2. validate_node_operation (23 seconds thinking about errors)
↓
3. Read error messages carefully
↓
4. Fix errors
↓
5. validate_node_operation again (58 seconds fixing)
↓
6. Repeat until valid (usually 2-3 iterations)Example
// Iteration 1
let config = {
resource: "channel",
operation: "create"
};
const result1 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "name"
// ⏱️ 23 seconds thinking...
// Iteration 2
config.name = "general";
const result2 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Error: Missing "text"
// ⏱️ 58 seconds fixing...
// Iteration 3
config.text = "Hello!";
const result3 = validate_node_operation({
nodeType: "nodes-base.slack",
config,
profile: "runtime"
});
// → Valid! ✅This is normal! Don't be discouraged by multiple iterations.
Validation Profiles
Choose the right profile for your stage:
minimal
Use when: Quick checks during editing
Validates:
- Only required fields
- Basic structure
Pros: Fastest, most permissive Cons: May miss issues
runtime (RECOMMENDED)
Use when: Pre-deployment validation
Validates:
- Required fields
- Value types
- Allowed values
- Basic dependencies
Pros: Balanced, catches real errors Cons: Some edge cases missed
This is the recommended profile for most use cases
ai-friendly
Use when: AI-generated configurations
Validates:
- Same as runtime
- Reduces false positives
- More tolerant of minor issues
Pros: Less noisy for AI workflows Cons: May allow some questionable configs
strict
Use when: Production deployment, critical workflows
Validates:
- Everything
- Best practices
- Performance concerns
- Security issues
Pros: Maximum safety Cons: Many warnings, some false positives
Common Error Types
1. missing_required
What it means: A required field is not provided
How to fix:
- Use
get_node_essentialsto see required fields - Add the missing field to your configuration
- Provide an appropriate value
Example:
// Error
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required"
}
// Fix
config.channel = "#general";2. invalid_value
What it means: Value doesn't match allowed options
How to fix:
- Check error message for allowed values
- Use
get_node_essentialsto see options - Update to a valid value
Example:
// Error
{
"type": "invalid_value",
"property": "operation",
"message": "Operation must be one of: post, update, delete",
"current": "send"
}
// Fix
config.operation = "post"; // Use valid operation3. type_mismatch
What it means: Wrong data type for field
How to fix:
- Check expected type in error message
- Convert value to correct type
Example:
// Error
{
"type": "type_mismatch",
"property": "limit",
"message": "Expected number, got string",
"current": "100"
}
// Fix
config.limit = 100; // Number, not string4. invalid_expression
What it means: Expression syntax error
How to fix:
- Use n8n Expression Syntax skill
- Check for missing
{{}}or typos - Verify node/field references
Example:
// Error
{
"type": "invalid_expression",
"property": "text",
"message": "Invalid expression: $json.name",
"current": "$json.name"
}
// Fix
config.text = "={{$json.name}}"; // Add {{}}5. invalid_reference
What it means: Referenced node doesn't exist
How to fix:
- Check node name spelling
- Verify node exists in workflow
- Update reference to correct name
Example:
// Error
{
"type": "invalid_reference",
"property": "expression",
"message": "Node 'HTTP Requets' does not exist",
"current": "={{$node['HTTP Requets'].json.data}}"
}
// Fix - correct typo
config.expression = "={{$node['HTTP Request'].json.data}}";Auto-Sanitization System
What It Does
Automatically fixes common operator structure issues on ANY workflow update
Runs when:
n8n_create_workflown8n_update_partial_workflow- Any workflow save operation
What It Fixes
1. Binary Operators (Two Values)
Operators: equals, notEquals, contains, notContains, greaterThan, lessThan, startsWith, endsWith
Fix: Removes singleValue property (binary operators compare two values)
Before:
{
"type": "boolean",
"operation": "equals",
"singleValue": true // ❌ Wrong!
}After (automatic):
{
"type": "boolean",
"operation": "equals"
// singleValue removed ✅
}2. Unary Operators (One Value)
Operators: isEmpty, isNotEmpty, true, false
Fix: Adds singleValue: true (unary operators check single value)
Before:
{
"type": "boolean",
"operation": "isEmpty"
// Missing singleValue ❌
}After (automatic):
{
"type": "boolean",
"operation": "isEmpty",
"singleValue": true // ✅ Added
}3. IF/Switch Metadata
Fix: Adds complete conditions.options metadata for IF v2.2+ and Switch v3.2+
What It CANNOT Fix
1. Broken Connections
References to non-existent nodes
Solution: Use cleanStaleConnections operation in n8n_update_partial_workflow
2. Branch Count Mismatches
3 Switch rules but only 2 output connections
Solution: Add missing connections or remove extra rules
3. Paradoxical Corrupt States
API returns corrupt data but rejects updates
Solution: May require manual database intervention
False Positives
What Are They?
Validation warnings that are technically "wrong" but acceptable in your use case
Common False Positives
1. "Missing error handling"
Warning: No error handling configured
When acceptable:
- Simple workflows where failures are obvious
- Testing/development workflows
- Non-critical notifications
When to fix: Production workflows handling important data
2. "No retry logic"
Warning: Node doesn't retry on failure
When acceptable:
- APIs with their own retry logic
- Idempotent operations
- Manual trigger workflows
When to fix: Flaky external services, production automation
3. "Missing rate limiting"
Warning: No rate limiting for API calls
When acceptable:
- Internal APIs with no limits
- Low-volume workflows
- APIs with server-side rate limiting
When to fix: Public APIs, high-volume workflows
4. "Unbounded query"
Warning: SELECT without LIMIT
When acceptable:
- Small known datasets
- Aggregation queries
- Development/testing
When to fix: Production queries on large tables
Reducing False Positives
Use ai-friendly profile:
validate_node_operation({
nodeType: "nodes-base.slack",
config: {...},
profile: "ai-friendly" // Fewer false positives
})Validation Result Structure
Complete Response
{
"valid": false,
"errors": [
{
"type": "missing_required",
"property": "channel",
"message": "Channel name is required",
"fix": "Provide a channel name (lowercase, no spaces)"
}
],
"warnings": [
{
"type": "best_practice",
"property": "errorHandling",
"message": "Slack API can have rate limits",
"suggestion": "Add onError: 'continueRegularOutput'"
}
],
"suggestions": [
{
"type": "optimization",
"message": "Consider using batch operations for multiple messages"
}
],
"summary": {
"hasErrors": true,
"errorCount": 1,
"warningCount": 1,
"suggestionCount": 1
}
}How to Read It
1. Check valid field
if (result.valid) {
// ✅ Configuration is valid
} else {
// ❌ Has errors - must fix before deployment
}2. Fix errors first
result.errors.forEach(error => {
console.log(`Error in ${error.property}: ${error.message}`);
console.log(`Fix: ${error.fix}`);
});3. Review warnings
result.warnings.forEach(warning => {
console.log(`Warning: ${warning.message}`);
console.log(`Suggestion: ${warning.suggestion}`);
// Decide if you need to address this
});4. Consider suggestions
// Optional improvements
// Not required but may enhance workflowWorkflow Validation
validate_workflow (Structure)
Validates entire workflow, not just individual nodes
Checks:
- Node configurations - Each node valid
- Connections - No broken references
- Expressions - Syntax and references valid
- Flow - Logical workflow structure
Example:
validate_workflow({
workflow: {
nodes: [...],
connections: {...}
},
options: {
validateNodes: true,
validateConnections: true,
validateExpressions: true,
profile: "runtime"
}
})Common Workflow Errors
1. Broken Connections
{
"error": "Connection from 'Transform' to 'NonExistent' - target node not found"
}Fix: Remove stale connection or create missing node
2. Circular Dependencies
{
"error": "Circular dependency detected: Node A → Node B → Node A"
}Fix: Restructure workflow to remove loop
3. Multiple Start Nodes
{
"warning": "Multiple trigger nodes found - only one will execute"
}Fix: Remove extra triggers or split into separate workflows
4. Disconnected Nodes
{
"warning": "Node 'Transform' is not connected to workflow flow"
}Fix: Connect node or remove if unused
Recovery Strategies
Strategy 1: Start Fresh
When: Configuration is severely broken
Steps:
- Note required fields from
get_node_essentials - Create minimal valid configuration
- Add features incrementally
- Validate after each addition
Strategy 2: Binary Search
When: Workflow validates but executes incorrectly
Steps:
- Remove half the nodes
- Validate and test
- If works: problem is in removed nodes
- If fails: problem is in remaining nodes
- Repeat until problem isolated
Strategy 3: Clean Stale Connections
When: "Node not found" errors
Steps:
n8n_update_partial_workflow({
id: "workflow-id",
operations: [{
type: "cleanStaleConnections"
}]
})Strategy 4: Use Auto-fix
When: Operator structure errors
Steps:
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: false // Preview first
})
// Review fixes, then apply
n8n_autofix_workflow({
id: "workflow-id",
applyFixes: true
})Best Practices
✅ Do
- Validate after every significant change
- Read error messages completely
- Fix errors iteratively (one at a time)
- Use
runtimeprofile for pre-deployment - Check
validfield before assuming success - Trust auto-sanitization for operator issues
- Use
get_node_essentialswhen unclear about requirements - Document false positives you accept
❌ Don't
- Skip validation before activation
- Try to fix all errors at once
- Ignore error messages
- Use
strictprofile during development (too noisy) - Assume validation passed (always check result)
- Manually fix auto-sanitization issues
- Deploy with unresolved errors
- Ignore all warnings (some are important!)
Detailed Guides
For comprehensive error catalogs and false positive examples:
- ERROR_CATALOG.md - Complete list of error types with examples
- FALSE_POSITIVES.md - When warnings are acceptable
Summary
Key Points:
- Validation is iterative (avg 2-3 cycles, 23s + 58s)
- Errors must be fixed, warnings are optional
- Auto-sanitization fixes operator structures automatically
- Use runtime profile for balanced validation
- False positives exist - learn to recognize them
- Read error messages - they contain fix guidance
Validation Process:
- Validate → Read errors → Fix → Validate again
- Repeat until valid (usually 2-3 iterations)
- Review warnings and decide if acceptable
- Deploy with confidence
Related Skills:
- n8n MCP Tools Expert - Use validation tools correctly
- n8n Expression Syntax - Fix expression errors
- n8n Node Configuration - Understand required fields
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

