The Storage Audit That Revealed Cursor's Complexity
A developer's forensic analysis of Cursor's local storage reveals a sprawling 8GB footprint spread across multiple locations: ~/.cursor/, Application Support folders, and a massive 1.2GB SQLite database called state.vscdb. This isn't just cache—it's a complex system with chat databases, transcript files, global state blobs, and workspace tracking.
Run this command on macOS to see your own Cursor footprint:
du -sh ~/.cursor ~/Library/Application\ Support/Cursor 2>/dev/null
The analysis found three primary storage layers:
- SQLite chat databases (
~/.cursor/chats/*/*/store.db) - 280MB across 171 files - Transcript JSONL files (
~/.cursor/projects/*/agent-transcripts/*.jsonl) - 138 files with conversation text - Global state database (
~/Library/Application Support/Cursor/User/globalStorage/state.vscdb) - 1.24GB alone
Why Claude Code's Approach Wins for Developers
Claude Code takes the opposite approach: clean, predictable storage in ~/.claude/projects/*.jsonl. Each project gets its own JSONL file containing the complete session transcript. This matters because:
For tooling developers: Claude Code's single-file-per-project structure means you can build automation scripts without navigating multiple databases. Want to analyze your coding patterns? Just parse the JSONL files.
For privacy-conscious users: You know exactly where your data lives. Delete ~/.claude and you've deleted all local Claude Code data. With Cursor, you need to hunt across multiple directories and databases.
For performance: Claude Code's JSONL files are human-readable and easily compressible. Cursor's SQLite databases with blobs and key-value stores create overhead that grows with usage.
What This Means for Your Claude Code Workflow
Claude Code's storage simplicity enables several practical advantages:
Easy session review:
# View your last Claude Code session
cat ~/.claude/projects/$(ls -t ~/.claude/projects | head -1) | tail -20
Simple cleanup scripts:
# Archive sessions older than 30 days
find ~/.claude/projects -name "*.jsonl" -mtime +30 -exec mv {} ~/claude_archive/ \;
Direct integration with other tools: Since JSONL is a standard format, you can pipe Claude Code sessions into analysis tools, search utilities, or backup systems without complex SQL queries.
The Storage Philosophy Difference
Cursor's approach reflects its VS Code heritage—layered, complex, with global state that persists across sessions. Claude Code's design follows Anthropic's philosophy of transparency and simplicity. This isn't just about storage efficiency; it's about developer control.
When you run claude code --clean, you get exactly what you expect: a fresh start. With Cursor, even after clearing caches, significant state remains in the global database.
Try This Claude Code Storage Hack Today
Create a .claude_history script to track your most productive sessions:
#!/bin/bash
# Save as ~/.claude_history
PROJECTS_DIR="$HOME/.claude/projects"
for file in $(ls -t "$PROJECTS_DIR"/*.jsonl 2>/dev/null | head -10); do
echo "=== $(basename "$file") ==="
# Count tokens (approximate)
word_count=$(wc -w "$file" | awk '{print $1}')
# Extract project name from first few lines
project_name=$(grep -i "project\|task" "$file" | head -1 | cut -c1-50)
echo "Words: $word_count | Project: $project_name"
echo
done
This works because Claude Code stores everything in accessible JSONL—no SQLite queries needed.
The Bottom Line for Claude Code Users
Claude Code's storage design isn't an accident—it's a feature. While Cursor accumulates 8GB of scattered data, Claude Code keeps your sessions organized, accessible, and under your control. This matters when you're building automation, managing privacy, or just trying to understand what's happening on your machine.
The next time you need to review a past coding session or clean up old data, appreciate that Claude Code's ~/.claude/projects/ structure was designed for developers, not just for the application's convenience.




