plugins/claude-ecosystem/skills/diagnose-performance/SKILL.md
Run comprehensive Claude Code performance diagnostics - analyzes storage, API status, and known issues
npx skillsauth add melodic-software/claude-code-plugins diagnose-performanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive performance diagnostic for Claude Code. This orchestrator command combines local analysis with API status checks and known issue research.
/diagnose-performance
/diagnose-performance --quick # Skip external checks
| Argument | Description |
|----------|-------------|
| --quick | Skip API status and GitHub issue checks (local analysis only) |
echo "Performance Diagnostic Report"
echo "============================="
echo "Generated: $(date '+%Y-%m-%d %H:%M:%S %Z')"
echo ""
# Get Claude Code version
VERSION=$(claude --version 2>/dev/null | head -1)
echo "Claude Code: $VERSION"
echo "Platform: $(uname -s) $(uname -m)"
echo ""
Analyze ALL folders in ~/.claude/:
echo "STORAGE ANALYSIS"
echo "================"
echo ""
# Total size
TOTAL=$(du -sh ~/.claude 2>/dev/null | cut -f1)
echo "Total ~/.claude size: $TOTAL"
echo ""
# Status determination
TOTAL_MB=$(du -sm ~/.claude 2>/dev/null | cut -f1)
if [ "$TOTAL_MB" -gt 1000 ]; then
STATUS="CRITICAL"
elif [ "$TOTAL_MB" -gt 500 ]; then
STATUS="WARNING"
else
STATUS="HEALTHY"
fi
echo "Status: $STATUS"
echo ""
# By category - ALL folders
echo "By Category:"
echo "------------"
printf " %-18s %10s %12s\n" "Folder" "Size" "Files"
printf " %-18s %10s %12s\n" "------" "----" "-----"
for dir in projects debug plugins file-history plans shell-snapshots todos statsig local; do
if [ -d "$HOME/.claude/$dir" ]; then
SIZE=$(du -sh "$HOME/.claude/$dir" 2>/dev/null | cut -f1)
COUNT=$(find "$HOME/.claude/$dir" -type f 2>/dev/null | wc -l)
printf " %-18s %10s %12d\n" "$dir/" "$SIZE" "$COUNT"
fi
done
# Individual files
for file in history.jsonl settings.json; do
if [ -f "$HOME/.claude/$file" ]; then
SIZE=$(du -sh "$HOME/.claude/$file" 2>/dev/null | cut -f1)
printf " %-18s %10s\n" "$file" "$SIZE"
fi
done
echo ""
echo "CURRENT PROJECT"
echo "==============="
# Cross-platform project path detection
if [ -n "$MSYSTEM" ]; then
PROJECT_NAME=$(pwd | sed 's|^/\([a-z]\)/|\U\1--|' | sed 's|/|--|g')
else
PROJECT_NAME=$(pwd | sed 's/[\/:]/-/g' | sed 's/^-//')
fi
PROJECT_DIR="$HOME/.claude/projects/$PROJECT_NAME"
echo "Project: $PROJECT_NAME"
if [ -d "$PROJECT_DIR" ]; then
PROJECT_SIZE=$(du -sh "$PROJECT_DIR" 2>/dev/null | cut -f1)
TOTAL_FILES=$(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" 2>/dev/null | wc -l)
AGENT_FILES=$(find "$PROJECT_DIR" -maxdepth 1 -name "agent-*.jsonl" 2>/dev/null | wc -l)
SESSION_FILES=$((TOTAL_FILES - AGENT_FILES))
echo "Size: $PROJECT_SIZE"
echo "Session files: $SESSION_FILES"
echo "Agent transcripts: $AGENT_FILES"
echo ""
echo "By Age:"
echo " Today: $(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" -mtime 0 2>/dev/null | wc -l)"
echo " 1-3 days: $(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" -mtime +0 -mtime -3 2>/dev/null | wc -l)"
echo " 3-7 days: $(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" -mtime +2 -mtime -7 2>/dev/null | wc -l)"
echo " >7 days: $(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" -mtime +7 2>/dev/null | wc -l)"
else
echo "No session data found"
fi
echo ""
echo "DEBUG TRANSCRIPTS"
echo "================="
if [ -d "$HOME/.claude/debug" ]; then
DEBUG_SIZE=$(du -sh "$HOME/.claude/debug" 2>/dev/null | cut -f1)
DEBUG_COUNT=$(find "$HOME/.claude/debug" -type f 2>/dev/null | wc -l)
OLD_DEBUG=$(find "$HOME/.claude/debug" -type f -mtime +7 2>/dev/null | wc -l)
echo "Total: $DEBUG_SIZE ($DEBUG_COUNT files)"
echo ">7 days: $OLD_DEBUG files"
# Warning if debug is large
DEBUG_MB=$(du -sm "$HOME/.claude/debug" 2>/dev/null | cut -f1)
if [ "$DEBUG_MB" -gt 100 ]; then
echo "WARNING: Debug folder is large. Run /cleanup-debug to reclaim space."
fi
else
echo "No debug folder found"
fi
echo ""
echo "LARGE FILES (>10MB)"
echo "==================="
LARGE_COUNT=$(find ~/.claude -type f -size +10M 2>/dev/null | wc -l)
if [ "$LARGE_COUNT" -gt 0 ]; then
find ~/.claude -type f -size +10M -exec ls -lh {} \; 2>/dev/null | \
awk '{print " " $5 " " $9}' | head -10
if [ "$LARGE_COUNT" -gt 10 ]; then
echo " ... and $((LARGE_COUNT - 10)) more"
fi
else
echo " None found"
fi
echo ""
echo "RECLAIMABLE SPACE"
echo "================="
TOTAL_RECLAIMABLE=0
# Sessions >7 days
if [ -d "$PROJECT_DIR" ]; then
OLD_SESSIONS=$(find "$PROJECT_DIR" -maxdepth 1 -name "*.jsonl" ! -name "agent-*" -mtime +7 2>/dev/null | wc -l)
OLD_AGENTS=$(find "$PROJECT_DIR" -maxdepth 1 -name "agent-*.jsonl" -mtime +7 2>/dev/null | wc -l)
echo " Sessions >7 days: $OLD_SESSIONS files"
echo " Agents >7 days: $OLD_AGENTS files"
fi
# Debug
if [ -d "$HOME/.claude/debug" ]; then
OLD_DEBUG=$(find "$HOME/.claude/debug" -type f -mtime +7 2>/dev/null | wc -l)
OLD_DEBUG_SIZE=$(find "$HOME/.claude/debug" -type f -mtime +7 -exec du -ch {} + 2>/dev/null | tail -1 | cut -f1)
echo " Debug >7 days: $OLD_DEBUG files (${OLD_DEBUG_SIZE:-0})"
fi
# Statsig (always safe)
if [ -d "$HOME/.claude/statsig" ]; then
STATSIG_SIZE=$(du -sh "$HOME/.claude/statsig" 2>/dev/null | cut -f1)
echo " Statsig cache: $STATSIG_SIZE (always safe)"
fi
If --quick is NOT specified, use the Task tool to spawn the performance-diagnostician agent:
Spawn performance-diagnostician agent to:
1. Check API status at status.anthropic.com
2. Search for known Claude Code performance issues on GitHub
3. Provide prioritized recommendations based on current version
Combine local analysis with agent findings into a unified report:
EXTERNAL CHECKS (from agent)
============================
API Status: {OPERATIONAL | DEGRADED | OUTAGE}
- Recent incidents: {list}
Known Issues:
- {issue number}: {title}
Workaround: {workaround}
RECOMMENDATIONS
===============
Priority 1: {most impactful action}
Priority 2: {second action}
Priority 3: {third action}
QUICK COMMANDS
==============
/cleanup-sessions 7 - Remove old session files
/cleanup-agents 7 - Remove old agent transcripts
/cleanup-debug 7 - Remove old debug transcripts
/prune-cache 7 - Comprehensive cleanup
/prune-cache --nuclear - Maximum cleanup (all folders)
/clear - Reset context window
Performance Diagnostic Report
=============================
Generated: 2025-12-26 16:45:00 EST
Claude Code: 2.0.75 (Claude Code)
Platform: MINGW64_NT-10.0 x86_64
STORAGE ANALYSIS
================
Total ~/.claude size: 1.5G
Status: CRITICAL
By Category:
------------
Folder Size Files
------ ---- -----
projects/ 950M 4928
debug/ 359M 878
plugins/ 149M 312
file-history/ 53M 1205
plans/ 2.4M 15
shell-snapshots/ 1.5M 12
todos/ 1.1M 45
history.jsonl 480K
CURRENT PROJECT
===============
Project: D--repos-gh-melodic-claude-code-plugins
Size: 948M
Session files: 510
Agent transcripts: 2140
By Age:
Today: 492
1-3 days: 948
3-7 days: 353
>7 days: 406
DEBUG TRANSCRIPTS
=================
Total: 359M (878 files)
>7 days: 0 files
LARGE FILES (>10MB)
===================
15M ~/.claude/projects/.../session-abc123.jsonl
14M ~/.claude/projects/.../session-def456.jsonl
RECLAIMABLE SPACE
=================
Sessions >7 days: 406 files
Agents >7 days: 0 files
Debug >7 days: 0 files (0)
Statsig cache: 34K (always safe)
EXTERNAL CHECKS
===============
API Status: OPERATIONAL
- Dec 23: Opus 4.5 elevated errors (resolved)
- Dec 22: Opus 4.5 elevated errors (resolved)
Known Issues:
- #14476: Input lag in v2.0.72+ (OPEN)
Workaround: Rollback to v2.0.36
- #10881: Long session degradation (OPEN)
Workaround: Restart Claude Code periodically
RECOMMENDATIONS
===============
Priority 1: Run /prune-cache --nuclear (frees ~400MB)
Priority 2: Restart Claude Code to reset session state
Priority 3: Use /clear proactively at 75% context
QUICK COMMANDS
==============
/cleanup-sessions 7 - Remove old session files
/cleanup-agents 7 - Remove old agent transcripts
/cleanup-debug 7 - Remove old debug transcripts
/prune-cache 7 - Comprehensive cleanup
/prune-cache --nuclear - Maximum cleanup (all folders)
/clear - Reset context window
/check-claude-storage/cleanup-* commands--quick flag skips network requests for offline diagnosticsdevelopment
Search Milan Jovanovic's .NET blog for Clean Architecture, DDD, CQRS, EF Core, and ASP.NET Core patterns. Use for finding applicable patterns, code examples, and architecture guidance. Invoke when working with .NET projects that could benefit from proven architectural patterns.
tools
Install and configure Data API Builder (DAB) for production SQL Server MCP access with RBAC
tools
Manage MssqlMcp servers - status, rebuild, and upstream updates
tools
Developer environment setup guides for Windows, macOS, Linux, and WSL. Use when setting up development machines, installing tools, configuring environments, or following platform-specific setup guides. Covers package management, shell/terminal, code editors, AI tooling, containerization, databases, and more.