Expert automation platform error debugger for Power Automate, n8n, Make, Zapier and other workflow platforms. Analyzes JSON flow definitions with error messages, researches official documentation, and generates complete fixed JSON ready for copy-paste. Triggers when user provides error JSON files, workflow JSON with errors, error messages, debug requests, or failing automation content. Returns structured debug report with root cause analysis and working fixed JSON.
Analyzes automation workflow errors from JSON files, error messages, or debug requests. Triggers when you provide error content from Power Automate, n8n, Make, or Zapier, then generates complete fixed JSON ready for copy-paste.
/plugin marketplace add MacroMan5/AutomationHelper_plugins/plugin install automation-helper@automation-helper-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Expert system for debugging automation workflow errors across multiple platforms and generating production-ready fixes.
This skill provides comprehensive debugging for automation workflows by:
Automatically activates when user provides:
The Mistake:
// You see a filter in the error flow
"where": "@contains(toLower(item()), 'keyword')"
// And you ASSUME it's filtering objects, so you fix with:
"value": "@items('Loop')?['PropertyName']" // ← WRONG IF ARRAY OF STRINGS!
How to Avoid:
item() vs item()?['Prop']item() without property → Array of primitives (strings/numbers)item()?['Property'] → Array of objectsOur Real Bug Example:
// Filter showed it was strings:
"where": "@contains(toLower(item()), 'cnesst')"
// But I incorrectly suggested accessing property:
"value": "@items('LoopCNESST')?['Nom']" // ← BUG!
// Correct fix was:
"value": "@items('LoopCNESST')" // ← Just the string!
The Mistake: Assuming SharePoint GetFileItems returns objects with 'Name' property without checking
How to Avoid:
The Mistake: Creating fixes that work syntactically but fail with actual data types
How to Avoid:
NEVER assume data structures without verification. Before debugging, ALWAYS analyze actual data structures in the failing flow.
Examine the Error Context
Analyze Filter/Query Operations (MOST IMPORTANT!)
where clauses in Query actionsitem() without property → Array of primitives (strings/numbers)
"where": "@contains(toLower(item()), 'keyword')"
// ↑ This means: Array of strings ["string1", "string2"]
item()?['PropertyName'] → Array of objects
"where": "@contains(item()?['Name'], 'keyword')"
// ↑ This means: Array of objects [{"Name": "..."}, ...]
Trace Data Sources
from in Query actions back to sourceValidate Item Access Consistency
items('LoopName') or items('LoopName')?['Property']item() or item()?['Property']item() but loop uses items('Loop')?['Prop'] → ERROR!Ask User When Uncertain (Use AskUserQuestion tool)
Example questions:
contains(item(), 'text'). Is your variable an array of strings like ['text1', 'text2'], or an array of objects?"items('Loop')?['Nom'] but the filter suggests strings. Which is correct?"Extract Error Information
Identify Context
CRITICAL: Research thoroughly using multiple sources in order. Never skip or guess!
Launch research sub-agent with thorough investigation:
Use Task tool with subagent_type="Explore" and thoroughness="very thorough"
Prompt: "Research [PLATFORM] documentation for [ERROR_TYPE] error in [CONNECTOR/NODE_NAME], specifically the [ACTION_NAME] action/node.
Platform: [Power Automate / n8n / Make / Zapier / Other]
Search in Docs/ directory for platform-specific documentation:
1. Platform documentation (Docs/{Platform}_Documentation/)
2. Connector/node overview - find limitations and constraints
3. **Data structure specifications** (output schemas, property names, data types)
4. Action/node documentation - find parameter requirements
5. Common error patterns for this platform
Focus on finding:
- **DATA STRUCTURE DETAILS** (output schemas, property names, array vs object)
- Known limitations causing this error
- Required parameters and their formats (platform-specific)
- API limits or throttling constraints
- Authentication/permission requirements
- Platform-specific quirks or known issues
- Common error scenarios and solutions
Return specific file paths, section names, and exact limitations found."
Expected Output from Research Agent:
ONLY if local documentation doesn't provide needed information, use WebSearch:
Use WebSearch tool with targeted queries:
Examples:
- "[PLATFORM] [CONNECTOR] output schema"
- "[PLATFORM] [ACTION_NAME] return properties"
- "[ERROR_CODE] [PLATFORM] [CONNECTOR] solution"
- "Microsoft Learn [PLATFORM] [CONNECTOR] documentation"
Search for:
- Official platform documentation (Microsoft Learn, n8n docs, etc.)
- Platform-specific community forums (verified answers only)
- Official API documentation
- Recent Stack Overflow solutions (check dates!)
Validation Requirements:
If both local docs and web search are unclear or contradictory, ask the user:
Use AskUserQuestion tool with specific targeted questions:
Example:
{
"questions": [{
"question": "Your flow uses `contains(item(), 'CNESST')` in the filter. Can you confirm what type of data is in this variable?",
"header": "Data Type",
"options": [
{
"label": "Array of strings",
"description": "Like ['CNESST 2025-01', 'INVALIDITÉ 2025-02']"
},
{
"label": "Array of objects",
"description": "Like [{'Nom': 'CNESST 2025-01'}, {'Nom': 'INVALIDITÉ 2025-02'}]"
}
],
"multiSelect": false
}]
}
When to Ask:
Based on research findings:
Root Cause Identification
Solution Strategy
Validation
CRITICAL: Use the Task tool to launch a flow-builder agent for JSON generation.
Launch flow-builder sub-agent:
Use Task tool with subagent_type="Plan" or "general-purpose"
Prompt: "Generate complete fixed workflow JSON for [PLATFORM] with the following requirements:
Platform: [Power Automate / n8n / Make / Zapier / Other]
Original Error: [ERROR_DETAILS]
Root Cause: [ROOT_CAUSE_FROM_RESEARCH]
Required Fixes: [SPECIFIC_CHANGES_NEEDED]
Create a complete, valid workflow JSON following the platform-specific format in Docs/{Platform}_Documentation/ that:
1. Includes all fixes for the identified error
2. Maintains existing workflow logic that works
3. Adds proper error handling (platform-specific)
4. Includes retry logic if dealing with transient errors
5. Respects API limits with delays if needed
6. Uses valid IDs/GUIDs as required by platform
7. Has correct dependencies/execution order
8. Follows platform-specific syntax and structure
9. Is ready for copy-paste into platform's import/code feature
Return ONLY the complete JSON with no placeholders or TODOs."
Expected Output from Flow-Builder Agent:
Generate final output using the template from output-style/template-debug-output.md:
Error Analysis Section
Root Cause Section
Solution Section
Fixed JSON Section
Alternative Approaches Section (if applicable)
Prevention Section
ALWAYS follow the XML-structured format from output-style/template-debug-output.md:
<debug_report>
<error_analysis>
[Error classification and details]
</error_analysis>
<root_cause>
[Root cause with documentation references]
</root_cause>
<solution>
[Step-by-step fix instructions]
</solution>
<fixed_json>
[Complete valid JSON ready for copy-paste]
</fixed_json>
<alternative_approaches>
[Other viable solutions if applicable]
</alternative_approaches>
<prevention>
[Best practices and monitoring]
</prevention>
</debug_report>
NEVER hallucinate or guess. Always:
NEVER output partial or placeholder JSON. Always:
Before delivering output, verify:
Data Structure Validation (CRITICAL - New!):
where clauses for data type indicatorsitem() vs item()?['Property'] consistency in fixitems() usage matches actual data structureResearch & Documentation:
Technical Validation:
Output Quality:
Authentication (401/403)
Throttling (429)
Data Format
Timeout
Not Found (404)
Purpose: Find relevant documentation and constraints
Input Requirements:
Expected Output:
Docs/{Platform}_Documentation/{Connector}/overview.mdInvocation:
Task tool, subagent_type="Explore", thoroughness="very thorough"
Purpose: Generate complete, valid Power Automate JSON
Input Requirements:
Expected Output:
Invocation:
Task tool, subagent_type="general-purpose" or "Plan"
User Input: "Fix the DossierPlusRécent variable - the filter works but loop assignment fails"
Error Flow Snippet:
{
"Filtrer_dossier_CNESST": {
"type": "Query",
"inputs": {
"from": "@variables('ListeDesDossier')",
"where": "@contains(toLower(item()), 'cnesst')" // ← KEY: item() without property!
}
},
"LoopCNESST": {
"foreach": "@body('Filtrer_dossier_CNESST')",
"actions": {
"DossierPlusRécent_CNESST": {
"type": "SetVariable",
"inputs": {
"name": "DossierPlusRecent",
"value": "@items('LoopCNESST')?['Nom']" // ← BUG: Accessing property on string!
}
},
"DEBUG_jour_CNESST": {
"type": "Compose",
"inputs": "@int(substring(
split(items('LoopCNESST')?['Nom'], '.')[0], // ← BUG: Also accessing Nom
8, 2))"
}
}
}
}
Debugging Workflow:
Phase 0 - Data Structure Analysis:
"where": "@contains(toLower(item()), 'cnesst')"item() without property → Array of strings!item()?['Nom'] → So NOT array of objectsListeDesDossier = ["CNESST 2025-01-15", "CNESST 2025-02-20"]Phase 1 - Error Analysis:
items('LoopCNESST')?['Nom']Phase 2 - Research (Skipped - structure analysis sufficient):
Phase 3 - Solution Design:
?['Nom'] property access throughout@items('LoopCNESST')Phase 4 - Generate Fix:
{
"DossierPlusRécent_CNESST": {
"type": "SetVariable",
"inputs": {
"name": "DossierPlusRecent",
"value": "@items('LoopCNESST')" // ← FIXED: Direct string access
}
},
"DEBUG_jour_CNESST": {
"type": "Compose",
"inputs": "@int(substring(
split(items('LoopCNESST'), '.')[0], // ← FIXED: Removed ?['Nom']
8, 2))"
}
}
Key Lessons:
item() reveals data typeitem() = primitives, item()?['Prop'] = objectsPrevention:
Input:
{
"error": "Status code: 429, TooManyRequests",
"action": "sharepointonline_getitems",
"connector": "SharePoint"
}
Workflow:
Input:
{
"error": "File not processed",
"trigger": "onedrive_whenfilecreated",
"connector": "OneDrive"
}
Workflow:
See also:
User messages that trigger this skill:
Version: 2.0 Last Updated: 2025-10-31 Platforms: Power Automate, n8n, Make, Zapier + extensible
Major Improvements:
Key Changes:
item() vs item()?['Property'] patterns in filters/queriesLessons Learned from Real Bugs:
contains(item(), 'x') = array of primitivesitems('Loop')?['Prop'] on strings) causes runtime errorsThis skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.