Configuration File Refactoring: Separate Data Concerns

Resolved 💬 3 comments Opened Aug 3, 2025 by hyunjae-labs Closed Aug 15, 2025

Bug Description
Thank You & Appreciation

First, I want to express my sincere gratitude for Claude Code. As a Claude Max subscriber, it
has truly transformed my development workflow and made coding an incredibly enjoyable
experience. The AI integration and productivity gains are outstanding.

Current Observation

While using Claude Code extensively, I've noticed that the .claude.json file grows significantly
over time. Currently, it combines:

  • Configuration settings (MCP servers, preferences)
  • Usage history and statistics
  • Tips history and UI state
  • Project-specific data

The file can become quite large with all this mixed data.

What if we could separate these?

It would be great if different types of data could be organized separately, something like:

~/.claude/
├── config.json # Core settings only (MCP, preferences)
├── history/
│ ├── usage-stats.json # Usage statistics
│ ├── tips.json # Tips history
│ └── projects.json # Project-specific data
└── cache/ # Temporary data

Benefits

  1. Cleaner Configuration: Users could easily backup/restore just settings
  2. Better Performance: Smaller config file would load faster
  3. Easier Management: Separate concerns would be simpler to handle
  4. Predictable Growth: Configuration would stay small and stable

This doesn't affect current functionality, but it would be a nice enhancement for future
releases.

Thank you again for the amazing tool! Looking forward to continued development.

Best regards,
A Happy Claude Code User

Environment Info

  • Platform: darwin
  • Terminal: vscode
  • Version: 1.0.67
  • Feedback ID:

Errors

[{"error":"Error: Command failed: security find-generic-password -a $USER -w -s \"Claude Code\"\nsecurity: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.\n\n    at genericNodeError (node:internal/errors:983:15)\n    at wrappedFn (node:internal/errors:537:14)\n    at checkExecSyncError (node:child_process:892:11)\n    at execSync (node:child_process:964:15)\n    at t7 (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:867:5214)\n    at file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:776:48453\n    at Q (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:674:14418)\n    at lJ (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:776:45891)\n    at yz (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:776:44758)\n    at W9 (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:776:51079)","timestamp":"2025-08-03T05:18:19.417Z"},{"error":"Error: Request was aborted.\n    at l71._createMessage (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:1327:7955)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)","timestamp":"2025-08-03T05:30:56.268Z"},{"error":"Error: EISDIR: illegal operation on a directory, read\n    at Module.readFileSync (node:fs:433:20)\n    at Object.readFileSync (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:680:7518)\n    at SYA (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:750:7232)\n    at Object.call (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:1508:6310)\n    at call.next (<anonymous>)\n    at XK8 (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:2546:10157)\n    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at async xf1 (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:2546:6576)\n    at async PNB (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:1867:1384)\n    at async JK8 (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:2546:5720)","timestamp":"2025-08-03T05:31:16.072Z"},{"error":"Error: Language not supported while highlighting code, falling back to markdown: ipynb\n    at file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:1474:421\n    at Object.useMemo (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:65:26368)\n    at $$9.useMemo (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:46:15588)\n    at lV (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:1474:313)\n    at KR (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:65:19859)\n    at Mb (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:67:42848)\n    at Nb (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js:67:38369)\n    at Bj (file:///opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cl

Note: Error logs were truncated.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗