18 KiB
18 KiB
Optimize n8n Workflow - Workflow Instructions
<critical>The workflow execution engine is governed by: {project_root}/{bmad_folder}/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
<critical>This workflow analyzes and optimizes existing n8n workflows for performance and best practices.</critical>
<workflow>
<step n="0" goal="Contextual Analysis (Smart Elicitation)">
<critical>Before asking any questions, analyze what the user has already told you</critical>
<action>Review the user's initial request and conversation history</action>
<action>Extract any mentioned: workflow file path, performance issues, optimization goals</action>
<check if="ALL requirements are clear from context">
<action>Summarize your understanding</action>
<action>Skip directly to Step 2 (Load Workflow)</action>
</check>
<check if="SOME requirements are clear">
<action>Note what you already know</action>
<action>Only ask about missing information in Step 1</action>
</check>
<check if="requirements are unclear or minimal">
<action>Proceed with full elicitation in Step 1</action>
</check>
</step>
<step n="1" goal="Gather Optimization Requirements" elicit="true">
<critical>Understand the REAL PROBLEMS the user is experiencing, not just generic optimization goals</critical>
<action>Ask Question 1: "Which workflow do you want to optimize?"</action>
<action>Present numbered options:
1. Provide file path - Specify exact path to workflow JSON
2. Search in workflows folder - List available workflows
3. Paste workflow JSON - Provide workflow content directly
</action>
<action>WAIT for user selection (1-3)</action>
<check if="selection is 1">
<action>Ask: "Please provide the file path to the workflow JSON"</action>
<action>WAIT for user input</action>
<action>Store in {{workflow_file}}</action>
</check>
<check if="selection is 2">
<action>List all .json files in workflows/ directory</action>
<action>Present as numbered list</action>
<action>WAIT for user selection</action>
<action>Store selected file path in {{workflow_file}}</action>
</check>
<check if="selection is 3">
<action>Ask: "Please paste the workflow JSON content"</action>
<action>WAIT for user input</action>
<action>Create temporary file with content</action>
<action>Store temp file path in {{workflow_file}}</action>
</check>
<action>Ask Question 2: "What problems are you experiencing with this workflow?"</action>
<action>Examples: "Takes too long to run", "Fails frequently", "Hard to understand", "Doesn't handle errors well"</action>
<action>WAIT for user input</action>
<action>Store in {{problems_experienced}}</action>
<action>Ask Question 3: "What's the business impact of these problems?"</action>
<action>Examples: "Delays customer responses", "Wastes team time", "Causes data issues", "Costs money"</action>
<action>WAIT for user input</action>
<action>Store in {{business_impact}}</action>
<action>Ask Question 4: "What would 'better' look like for this workflow?"</action>
<action>Focus on desired outcomes: "Faster execution", "More reliable", "Easier to maintain", "Better error recovery"</action>
<action>WAIT for user input</action>
<action>Store in {{desired_improvements}}</action>
<action>Ask Question 5: "Are there specific areas you want me to focus on?"</action>
<action>Present numbered options (can select multiple):
1. Performance - Speed and efficiency
2. Reliability - Error handling and retries
3. Maintainability - Code quality and structure
4. Security - Credential and data handling
5. All - Comprehensive review
6. Let you decide - Analyze and recommend
</action>
<action>WAIT for user selection (1-6 or multiple)</action>
<action>Store selections in {{optimization_focus}}</action>
<action>Summarize understanding:</action>
<action>- Problems: {{problems_experienced}}</action>
<action>- Business Impact: {{business_impact}}</action>
<action>- Desired Improvements: {{desired_improvements}}</action>
<action>- Focus Areas: {{optimization_focus}}</action>
<action>Ask: "Does this capture your optimization needs?"</action>
<action>Present numbered options:
1. Yes - Proceed with analysis
2. No - Let me clarify
</action>
<action>WAIT for user selection (1-2)</action>
<check if="selection is 2">
<action>Ask: "What needs clarification?"</action>
<action>WAIT for user input</action>
<action>Update relevant variables</action>
<action>Repeat summary and confirmation</action>
</check>
</step>
<step n="2" goal="Load Workflow">
<critical>Only load the workflow file when user provides it - never preload</critical>
<action>Read workflow file from {{workflow_file}}</action>
<action>Parse JSON content</action>
<action>Validate JSON structure</action>
<check if="JSON is invalid">
<action>Inform user: "The workflow file has invalid JSON syntax"</action>
<action>Show error details</action>
<action>Ask: "Would you like me to fix the JSON syntax first? (yes/no)"</action>
<action>WAIT for user response</action>
<check if="user says yes">
<action>Fix JSON syntax errors</action>
<action>Save corrected file</action>
<action>Proceed with loading</action>
</check>
<check if="user says no">
<action>Exit workflow with error</action>
</check>
</check>
<action>Extract workflow structure:</action>
<action>- Workflow name and settings</action>
<action>- Node count and types</action>
<action>- Connection patterns</action>
<action>- Error handling configuration</action>
<action>- Credential usage</action>
<action>Display workflow summary to user:</action>
<action>- Name: [workflow name]</action>
<action>- Nodes: [count] nodes</action>
<action>- Complexity: [simple/medium/complex]</action>
<action>- Integrations: [list of services]</action>
</step>
<step n="3" goal="Research n8n Best Practices and Optimization">
<critical>Search for n8n documentation on optimization and best practices</critical>
<action>Inform user: "Researching n8n best practices and optimization techniques..."</action>
<action>Perform web search for:</action>
<action>1. n8n performance optimization</action>
<action>2. n8n error handling best practices</action>
<action>3. n8n workflow structure patterns</action>
<action>4. n8n security best practices</action>
<action>5. Solutions for: {{problems_experienced}}</action>
<action>Search queries to use:</action>
<action>- "n8n workflow optimization best practices"</action>
<action>- "n8n performance tuning"</action>
<action>- "n8n error handling patterns"</action>
<action>- "n8n workflow security"</action>
<action>- "n8n [specific problem] solution"</action>
<action>Focus on official n8n documentation at docs.n8n.io</action>
<action>Store relevant optimization techniques and best practices</action>
</step>
<step n="4" goal="Verify Optimization Strategy">
<action>Summarize optimization approach based on documentation:</action>
<action>- Solutions for {{problems_experienced}}</action>
<action>- Best practices to apply</action>
<action>- Performance improvements available</action>
<action>- Expected impact on {{business_impact}}</action>
<action>Inform user: "Based on n8n best practices, I've identified optimization opportunities."</action>
</step>
<step n="5" goal="Analyze Workflow">
<action>Load {{helpers}} for best practices reference</action>
<action>Perform comprehensive analysis based on {{optimization_focus}}:</action>
<substep>Performance Analysis:
- Check for unnecessary nodes
- Identify inefficient data transformations
- Look for missing batch processing opportunities
- Check for redundant API calls
- Analyze node execution order
- Identify parallel execution opportunities
</substep>
<substep>Error Handling Analysis:
- Check if critical nodes have retry logic
- Verify continueOnFail settings
- Look for missing error workflows
- Check timeout configurations
- Verify error notification setup
</substep>
<substep>Code Quality Analysis:
- Review Set node configurations
- Review Code node implementations
- Check expression syntax and efficiency
- Verify data type handling
- Check for hardcoded values
- Review node naming conventions
</substep>
<substep>Structure Analysis:
- Check node positioning and layout
- Verify logical flow organization
- Look for overly complex branches
- Check for duplicate logic
- Verify proper use of merge nodes
- Check connection patterns
</substep>
<substep>Best Practices Analysis:
- Verify proper credential usage
- Check for security issues
- Verify proper use of node types
- Check for deprecated node versions
- Verify proper data handling
- Check workflow settings
</substep>
<substep>Security Analysis:
- Check credential exposure
- Verify sensitive data handling
- Check for hardcoded secrets
- Verify proper authentication
- Check data sanitization
</substep>
<action>Store all findings in {{issues_found}}</action>
</step>
<step n="6" goal="Generate Recommendations">
<action>For each issue found, generate specific recommendations:</action>
<action>Categorize recommendations by priority:</action>
<action>- Critical: Security issues, major performance problems</action>
<action>- High: Error handling gaps, significant inefficiencies</action>
<action>- Medium: Code quality improvements, minor optimizations</action>
<action>- Low: Cosmetic improvements, nice-to-haves</action>
<action>For each recommendation, provide:</action>
<action>1. Issue description</action>
<action>2. Impact explanation</action>
<action>3. Specific solution</action>
<action>4. Implementation steps</action>
<action>5. Expected improvement</action>
<action>Store recommendations in {{recommendations}}</action>
</step>
<step n="7" goal="Present Analysis Report" elicit="true">
<action>Present comprehensive optimization report:</action>
<action>## Workflow Analysis Report</action>
<action>Workflow: {{workflow_name}}</action>
<action>Analysis Date: {timestamp}</action>
<action>Optimization Focus: {{optimization_focus}}</action>
<action>### Summary</action>
<action>- Total Issues Found: [count]</action>
<action>- Critical: [count]</action>
<action>- High Priority: [count]</action>
<action>- Medium Priority: [count]</action>
<action>- Low Priority: [count]</action>
<action>### Detailed Findings</action>
<action>Present each issue with:</action>
<action>- Priority level</action>
<action>- Issue description</action>
<action>- Current state</action>
<action>- Recommended solution</action>
<action>- Expected impact</action>
<action>### Performance Opportunities</action>
<action>List specific performance improvements with estimated impact</action>
<action>### Best Practice Violations</action>
<action>List n8n best practices not being followed</action>
<action>Ask: "Would you like me to apply these optimizations?"</action>
<action>Present numbered options:
1. Yes - Apply all recommendations
2. Yes - Apply only critical and high priority
3. Yes - Let me choose which to apply
4. No - Just provide the report
5. Explain more - I need more details first
</action>
<action>WAIT for user selection (1-5)</action>
<check if="selection is 5">
<action>Ask: "Which recommendations would you like explained?"</action>
<action>WAIT for user input</action>
<action>Provide detailed explanation</action>
<action>Repeat this step</action>
</check>
<check if="selection is 3">
<action>Present recommendations as numbered list</action>
<action>Ask: "Select recommendations to apply (comma-separated numbers)"</action>
<action>WAIT for user input</action>
<action>Store selected recommendations</action>
</check>
<check if="selection is 1, 2, or 3">
<action>Store true in {{apply_changes}}</action>
<action>Proceed to Step 8</action>
</check>
<check if="selection is 4">
<action>Store false in {{apply_changes}}</action>
<action>Skip to Step 11 (provide report only)</action>
</check>
</step>
<step n="8" goal="Create Backup">
<check if="{{apply_changes}} is true">
<action>Create backup of original workflow</action>
<action>Save backup to: {{workflow_file}}.backup-{timestamp}</action>
<action>Store true in {{backup_created}}</action>
<action>Inform user: "Backup created at {{workflow_file}}.backup-{timestamp}"</action>
</check>
</step>
<step n="9" goal="Apply Optimizations">
<critical>Follow guidelines from {{helpers}} for proper node configuration</critical>
<action>Load current workflow JSON into memory</action>
<action>Apply each selected recommendation:</action>
<substep>Performance Optimizations:
- Remove unnecessary nodes
- Optimize data transformations
- Add batch processing where applicable
- Consolidate redundant API calls
- Optimize node execution order
- Add parallel execution where possible
</substep>
<substep>Error Handling Improvements:
- Add retry logic to critical nodes
- Set appropriate continueOnFail values
- Add error workflows if needed
- Configure timeouts
- Add error notifications
</substep>
<substep>Code Quality Improvements:
- Refactor Set node configurations
- Optimize Code node implementations
- Improve expression syntax
- Fix data type handling
- Replace hardcoded values with variables
- Improve node naming
</substep>
<substep>Structure Improvements:
- Reorganize node positions
- Simplify complex branches
- Remove duplicate logic
- Optimize merge points
- Improve connection patterns
</substep>
<substep>Best Practice Applications:
- Fix credential usage
- Address security issues
- Update deprecated nodes
- Improve data handling
- Update workflow settings
</substep>
<action>Validate optimized workflow:</action>
<action>- All node IDs remain unique</action>
<action>- All connections are valid</action>
<action>- No functionality is lost</action>
<action>- All improvements are applied</action>
</step>
<step n="10" goal="Save Optimized Workflow">
<action>Save optimized workflow to {{workflow_file}}</action>
</step>
<step n="11" goal="Validate JSON Syntax">
<check if="{{apply_changes}} is true">
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{workflow_file}}', 'utf8')); console.log('✓ Valid JSON')"</action>
<check if="validation fails (exit code 1)">
<action>Read the error message carefully - it shows the syntax error and position</action>
<action>Open the file and navigate to the error location</action>
<action>Fix the syntax error (add missing comma, bracket, or quote as indicated)</action>
<action>Save the file</action>
<action>Re-run validation with the same command</action>
<action>Repeat until validation passes</action>
</check>
<action>Once validation passes, confirm with user: "Workflow optimized successfully at {{workflow_file}}"</action>
</check>
</step>
<step n="12" goal="Provide Optimization Summary">
<action>Provide comprehensive summary:</action>
<check if="{{apply_changes}} is true">
<action>### Optimizations Applied</action>
<action>- Total changes: [count]</action>
<action>- Performance improvements: [list]</action>
<action>- Error handling added: [list]</action>
<action>- Code quality fixes: [list]</action>
<action>- Structure improvements: [list]</action>
<action>- Best practices applied: [list]</action>
<action>- Backup location: {{workflow_file}}.backup-{timestamp}</action>
<action>### Expected Improvements</action>
<action>- Execution speed: [estimated improvement]</action>
<action>- Reliability: [improvements]</action>
<action>- Maintainability: [improvements]</action>
<action>- Security: [improvements]</action>
<action>### Testing Recommendations</action>
<action>1. Import optimized workflow into n8n</action>
<action>2. Test with sample data</action>
<action>3. Compare execution times with original</action>
<action>4. Verify all functionality works correctly</action>
<action>5. Monitor error rates</action>
</check>
<check if="{{apply_changes}} is false">
<action>### Optimization Report</action>
<action>Report saved with all recommendations</action>
<action>No changes applied to workflow</action>
<action>Review recommendations and apply manually if desired</action>
</check>
<action>Ask: "Would you like additional help?"</action>
<action>Present numbered options:
1. No - I'm done
2. Yes - Explain specific optimizations
3. Yes - Optimize another workflow
4. Revert - Restore from backup
</action>
<action>WAIT for user selection (1-4)</action>
<check if="selection is 2">
<action>Ask: "Which optimization would you like explained?"</action>
<action>WAIT for user input</action>
<action>Provide detailed explanation</action>
</check>
<check if="selection is 3">
<action>Return to Step 1 for new workflow</action>
</check>
<check if="selection is 4">
<action>Restore workflow from backup</action>
<action>Confirm restoration to user</action>
</check>
</step>
<step n="13" goal="Validate Content">
<invoke-task>Validate against checklist at {{validation}} using {{bmad_folder}}/core/tasks/validate-workflow.xml</invoke-task>
</step>
</workflow>