Troubleshooting Guide
Solve common issues and debug problems with Donobu automation flows. Includes error codes, solutions, and debugging techniques.
Common Issues & Solutions 🔧
This guide helps you quickly identify and resolve common problems with Donobu automation flows.
Installation & Setup Issues
Donobu Won't Start
Symptoms:
- App crashes on startup
- "Failed to initialize" error messages
- Blank window or loading screen
Solutions:
Check System Requirements
- macOS 10.15 or later (Intel/Apple Silicon)
- At least 4GB RAM available
- 2GB free disk space
Reset Application Data
# Close Donobu completely # Remove application data (macOS) rm -rf ~/Library/Application\ Support/Donobu rm -rf ~/Library/Caches/Donobu # Restart Donobu
Check Permissions
- Grant Accessibility permissions in System Preferences
- Allow Donobu in Privacy & Security settings
- Restart after granting permissions
API Server Not Responding
Symptoms:
curl: (7) Failed to connect to localhost port 31000
- "Connection refused" errors
- API endpoints returning 404
Solutions:
Verify Server Status
# Check if API server is running curl -X GET http://localhost:31000/api/ping # Expected response: {"status": "pong"}
Restart API Server
- Close and reopen Donobu Studio
- Check "API Server" status in app settings
- Verify no other applications are using port 31000
Port Conflicts
# Check what's using port 31000 lsof -i :31000 # Kill conflicting processes if necessary kill -9 <PID>
GPT Configuration Issues
"GPT Config Not Found" Errors
Symptoms:
- Flow fails with "GPT configuration 'xyz' not found"
- "No valid GPT configuration" messages
- Flows stuck in INITIALIZING state
Solutions:
List Current Configurations
curl -X GET http://localhost:31000/api/gpt-configs
Create Missing Configuration
# OpenAI example curl -X POST http://localhost:31000/api/gpt-configs/openai-gpt4 \ -H "Content-Type: application/json" \ -d '{ "type": "OPENAI", "apiKey": "your-api-key", "modelName": "gpt-4" }'
Verify API Key Validity
- Test API key directly with provider
- Check for expired or invalid credentials
- Ensure sufficient API quota/credits
API Rate Limiting
Symptoms:
- "Rate limit exceeded" errors
- Flows failing after partial completion
- Slow response times from GPT
Solutions:
Implement Delays
{ "customTools": [{ "name": "rateLimitedRequest", "description": "Makes request with rate limiting", "javascript": ` // Add delay between AI requests await page.waitForTimeout(2000); // Continue with normal flow ` }] }
Use Different Model
- Switch to less restrictive model
- Use multiple API keys/configurations
- Distribute load across different providers
Flow Execution Problems
Flows Stuck in INITIALIZING
Symptoms:
- Flow state remains "INITIALIZING"
- Browser window never opens
- No progress after several minutes
Debugging Steps:
Check Browser Configuration
{ "browser": { "using": { "type": "device", "deviceName": "Desktop Chromium", // Verify valid device name "headless": false // Try with headless=false first } } }
Verify System Resources
# Check available memory vm_stat # Check CPU usage top -n 1
Test Simple Flow
{ "name": "Debug Test", "targetWebsite": "https://example.com", "overallObjective": "Just navigate to the page", "maxToolCalls": 1 }
Element Not Found Errors
Symptoms:
- "Element not found" or "Selector not found"
- "Timeout waiting for selector"
- Actions failing on dynamic content
Solutions:
Add Wait Conditions
{ "customTools": [{ "name": "waitForElement", "description": "Wait for element to be available", "inputSchema": { "type": "object", "properties": { "selector": {"type": "string"}, "timeout": {"type": "number", "default": 10000} } }, "javascript": ` await page.locator(selector).waitFor({ state: 'visible', timeout: timeout }); ` }] }
Use More Resilient Selectors
// Bad - fragile selectors "#button-123" ".container > div:nth-child(3)" // Good - semantic selectors "[data-testid='submit-button']" "button:has-text('Submit')" "[aria-label='Close dialog']"
Handle Dynamic Content
{ "customTools": [{ "name": "handleDynamicContent", "description": "Waits for dynamic content to stabilize", "javascript": ` // Wait for network to be idle await page.waitForLoadState('networkidle'); // Wait for specific content to load await page.waitForFunction(() => { return document.querySelectorAll('.dynamic-item').length > 0; }); ` }] }
Flows Failing with "Objective Not Completable"
Symptoms:
- Flow reaches "FAILED" state
- AI reports "Cannot complete objective"
- Partial completion with early termination
Debugging Approaches:
Simplify Objective
// Instead of complex objective { "overallObjective": "Find the best wireless headphones under $100, compare prices across multiple vendors, add to cart, and proceed to checkout" } // Break into smaller parts { "overallObjective": "Search for wireless headphones and navigate to the first product page" }
Add Intermediate Validation
{ "resultJsonSchema": { "type": "object", "properties": { "searchCompleted": {"type": "boolean"}, "productFound": {"type": "boolean"}, "priceExtracted": {"type": "boolean"} } } }
Enable Debug Mode
{ "browser": { "using": { "type": "device", "headless": false // Watch execution } }, "isControlPanelEnabled": true // Enable in-browser controls }
Browser & Network Issues
Page Load Timeouts
Symptoms:
- "Navigation timeout" errors
- Flows failing on slow pages
- Incomplete page renders
Solutions:
Increase Timeout Values
{ "customTools": [{ "name": "navigateWithTimeout", "description": "Navigate with extended timeout", "inputSchema": { "type": "object", "properties": { "url": {"type": "string"}, "timeout": {"type": "number", "default": 30000} } }, "javascript": ` await page.goto(url, { waitUntil: 'networkidle', timeout: timeout }); ` }] }
Handle Slow Networks
{ "browser": { "using": { "type": "device", "proxy": { "server": "http://your-proxy:8080" // If behind corporate proxy } } } }
SSL/Certificate Issues
Symptoms:
- "Certificate error" messages
- HTTPS sites not loading
- "NET::ERR_CERT_INVALID" errors
Solutions:
Ignore Certificate Errors (Development Only)
{ "customTools": [{ "name": "ignoreSSLErrors", "description": "Configure browser to ignore SSL errors", "javascript": ` // Note: Only use in development/testing environments await page.context().grantPermissions(['clipboard-read', 'clipboard-write']); ` }] }
Use HTTP for Local Testing
{ "targetWebsite": "http://localhost:3000" // Use HTTP for local dev }
Performance Issues
Slow Flow Execution
Symptoms:
- Flows taking much longer than expected
- Browser appears frozen
- High CPU/memory usage
Optimization Strategies:
Reduce Visual Overhead
{ "browser": { "using": { "type": "device", "headless": true // Faster execution } } }
Optimize Tool Selection
{ "allowedTools": [ "click", "type", "goToWebpage", "assert" // Only essential tools ] }
Disable Unnecessary Features
{ "isControlPanelEnabled": false, // Disable UI controls "defaultMessageDuration": 0 // Skip AI messages }
Memory Leaks
Symptoms:
- Increasing memory usage over time
- Browser crashes during long flows
- System becoming unresponsive
Solutions:
Clean Up Resources
{ "customTools": [{ "name": "cleanupResources", "description": "Clean up browser resources", "javascript": ` // Close unused tabs const pages = page.context().pages(); for (let i = 1; i < pages.length; i++) { await pages[i].close(); } // Clear browser data periodically await page.context().clearCookies(); ` }] }
Limit Flow Duration
{ "maxToolCalls": 50, // Prevent runaway flows "callbackUrl": "https://your-app.com/cleanup" // Cleanup webhook }
Debugging Techniques 🔍
Enable Comprehensive Logging
Flow Debugging
# Get detailed flow information curl -X GET http://localhost:31000/api/flows/{flowId} # Get all tool calls curl -X GET http://localhost:31000/api/flows/{flowId}/tool-calls
Visual Debugging
# Download screenshots at each step curl -X GET http://localhost:31000/api/flows/{flowId}/images/{imageId} \ --output debug-step-{imageId}.png # Download full video curl -X GET http://localhost:31000/api/flows/{flowId}/video \ --output debug-flow.webm
Custom Debugging Tools
{ "customTools": [{ "name": "debugPageState", "description": "Captures comprehensive page state for debugging", "javascript": ` const state = { url: page.url(), title: await page.title(), viewport: await page.viewportSize(), elements: await page.evaluate(() => { return Array.from(document.querySelectorAll('*')).length; }), forms: await page.evaluate(() => { return Array.from(document.forms).map(f => ({ action: f.action, method: f.method, elements: f.elements.length })); }), errors: await page.evaluate(() => { return window.console?.errors || []; }) }; console.log('DEBUG STATE:', JSON.stringify(state, null, 2)); return state; ` }] }
Getting Help 💬
When you need additional support:
Gather Information
- Flow ID and configuration
- Error messages and stack traces
- Screenshots/videos of the issue
- System information (OS, browser version)
Create Minimal Reproduction
- Simplify flow to minimal failing case
- Remove sensitive data
- Test with public websites when possible
Check Resources
- Review API documentation
- Search existing issues
- Check system requirements
Remember: Most issues have simple solutions. Start with the basics (restart, check configurations, simplify objectives) before diving into complex debugging.