// Analyzes errors, searches past solutions in memory, provides immediate fixes with code examples, and saves solutions for future reference. Use when user says "debug this", "fix this error", "why is this failing", or when error messages appear like TypeError, ECONNREFUSED, CORS, 404, 500, etc.
| name | error-debugger |
| description | Analyzes errors, searches past solutions in memory, provides immediate fixes with code examples, and saves solutions for future reference. Use when user says "debug this", "fix this error", "why is this failing", or when error messages appear like TypeError, ECONNREFUSED, CORS, 404, 500, etc. |
Context-aware debugging that learns from past solutions. When an error occurs:
For ADHD users: Eliminates debugging frustration - instant, actionable fixes. For SDAM users: Recalls past solutions you've already found. For all users: Gets smarter over time as it learns from your codebase.
Extract key information:
{
error_type: "TypeError|ReferenceError|ECONNREFUSED|...",
message: "Cannot read property 'map' of undefined",
stack_trace: [...],
file: "src/components/UserList.jsx",
line: 42,
context: "Rendering user list"
}
Query context-manager:
search memories for:
- error_type match
- similar message (fuzzy match)
- same file/component if available
- related tags (if previously tagged)
If match found:
๐ Found similar past error!
๐ 3 months ago: TypeError in UserList component
โ
Solution: Added null check before map
โฑ๏ธ Fixed in: 5 minutes
๐ Memory: procedures/{uuid}.md
Applying the same solution...
If no match:
๐ New error - analyzing...
(Will save solution after fix)
See reference.md for comprehensive error pattern library.
Quick common patterns:
Format:
๐ง Error Analysis
**Type**: {error_type}
**Location**: {file}:{line}
**Cause**: {root_cause_explanation}
**Fix**:
```javascript
// โ Current code
const users = data.users;
return users.map(user => <div>{user.name}</div>);
// โ
Fixed code
const users = data?.users || [];
return users.map(user => <div>{user.name}</div>);
Explanation: Added optional chaining and default empty array to handle case where data or data.users is undefined.
Prevention: Always validate API response structure before using.
Next steps:
### 5. Save Solution
After fix confirmed working:
```bash
# Save to context-manager as PROCEDURE
remember: Fix for TypeError in map operations
Type: PROCEDURE
Tags: error, typescript, array-operations
Content: When getting "Cannot read property 'map' of undefined",
add optional chaining and default empty array:
data?.users || []
Memory structure:
# PROCEDURE: Fix TypeError in map operations
**Error Type**: TypeError
**Message Pattern**: Cannot read property 'map' of undefined
**Context**: Array operations on potentially undefined data
## Solution
Use optional chaining and default values:
```javascript
// Before
const items = data.items;
return items.map(...)
// After
const items = data?.items || [];
return items.map(...)
โ Fixed in UserList component (2025-10-17) โ Regression test: tests/components/UserList.test.jsx
error, typescript, array-operations, undefined-handling
### 6. Create Regression Test
Automatically invoke testing-builder:
create regression test for this fix:
## Tool Persistence Pattern (Meta-Learning)
**Critical principle from self-analysis**: Never give up on first obstacle. Try 3 approaches before abandoning a solution path.
### Debugging Tools Hierarchy
When debugging an error, try these tools in sequence:
**1. Search Past Solutions (context-manager)**
```bash
# First approach: Check memory
search memories for error pattern
If no past solution found โ Continue to next approach
2. GitHub Copilot CLI Search
# Second approach: Search public issues
copilot "Search GitHub for solutions to: $ERROR_MESSAGE"
If Copilot doesn't find good results โ Continue to next approach
3. Web Search with Current Context
# Third approach: Real-time web search
[Use web search for latest Stack Overflow solutions]
If web search fails โ Then ask user for more context
What happened: Tried GitHub MCP โ Got auth error โ Immediately gave up
What should have happened:
gh CLI โ Check if authenticatedOutcome: The gh CLI WAS authenticated and worked perfectly. We gave up too early.
When fixing an error:
// Pattern: Try 3 fix approaches
async function debugError(error) {
// Approach 1: Past solution
const pastFix = await searchMemories(error);
if (pastFix?.success_rate > 80%) {
return applyPastFix(pastFix);
}
// Approach 2: Pattern matching
const commonFix = matchErrorPattern(error);
if (commonFix) {
return applyCommonFix(commonFix);
}
// Approach 3: External search (Copilot/Web)
const externalSolution = await searchExternalSolutions(error);
if (externalSolution) {
return applyExternalSolution(externalSolution);
}
// Only NOW ask for more context
return askUserForMoreContext(error);
}
When integrations are available, use them in this order:
For Error Search:
For Solutions:
Track debugging approach success:
{
"error_id": "uuid",
"approaches_tried": [
{"type": "memory_search", "result": "no_match"},
{"type": "copilot_search", "result": "success", "time": "5s"},
{"type": "applied_fix", "verified": true}
],
"total_time": "30s",
"lesson": "Copilot found solution on second try"
}
Key insight: Most "failed" approaches are actually "didn't try enough" approaches.
Before analyzing new error:
// Search context-manager
const pastSolutions = searchMemories({
type: 'PROCEDURE',
tags: [errorType, language, framework],
content: errorMessage,
fuzzyMatch: true
});
if (pastSolutions.length > 0) {
// Show user the past solution
// Ask if they want to apply it
// If yes, apply and test
// If no, analyze fresh
}
Track which solutions work:
{
solution_id: "uuid",
error_pattern: "TypeError.*map.*undefined",
times_applied: 5,
success_rate: 100%,
last_used: "2025-10-15",
avg_fix_time: "2 minutes"
}
Sort solutions by success rate when multiple matches found.
Some errors are project-specific:
// BOOSTBOX-specific
Error: "Boost ID not found"
โ Solution: Check boost exists before processing
// Tool Hub-specific
Error: "Tool not installed"
โ Solution: Run tool installer first
// Save these as PROJECT-specific procedures
After providing fix:
Automatically invoke: testing-builder
Create regression test for: {error_scenario}
Ensure test fails without fix, passes with fix
Query for similar errors:
search memories for:
- PROCEDURE type
- Error tag
- Similar message
- Same file/component
Save new solutions:
Save as PROCEDURE:
- Error pattern
- Solution
- Code examples
- Tested timestamp
For complex fixes:
If fix requires significant refactoring:
โ Invoke rapid-prototyper
โ Create isolated example showing fix
โ User validates before applying to codebase
| Error | Quick Fix |
|---|---|
undefined.map | `data?.array |
X is not a function | Check function exists |
ECONNREFUSED | Check service running |
CORS | Configure CORS headers |
404 | Verify route exists |
500 | Check server logs |
Timeout | Increase timeout value |
Cannot find module | Install dependency |
/home/toowired/.claude-memories/procedures/โ Common errors fixed instantly (<30 seconds) โ Past solutions automatically recalled โ All fixes include code examples โ Regression tests created automatically โ Solutions saved for future reference โ Debugging gets faster over time