Protect Claude Code from configuration corruption that causes crash loops and service unavailability
npm install @iesouskurios/claude-config-protector


!Platform-green.svg)
!License
Protect your Claude Code from configuration corruption that causes crash loops and service unavailability.
NPM Package: https://www.npmjs.com/package/claude-config-protector
GitHub Repo: https://github.com/jfuginay/claude-config-protector
Claude Code's configuration file (~/.claude.json) can grow unbounded and become corrupted, causing:
- š“ Service crashes and infinite restart loops (1200+ restarts observed)
- š“ Complete loss of Claude Code availability
- š“ Manual intervention required every time
- š“ Lost productivity and frustration
Users report this happening daily when the config exceeds 8MB. See issue #2810.
This protector runs in the background and automatically:
- ā
Monitors config file for size and corruption
- ā
Prevents corruption with atomic write operations
- ā
Recovers automatically from corrupted configs
- ā
Truncates large configs before they hit the 8MB threshold
- ā
Backs up valid configurations hourly
``bashInstall globally
npm install -g claude-config-protector
$3
`bash
Clone the repository
git clone https://github.com/jfuginay/claude-config-protector.git
cd claude-config-protectorRun the installer
./install.shVerify it's working
./test.sh
`CLI Commands
Once installed, use the
ccp command (or claude-config-protector):`bash
ccp start # Start the protector daemon
ccp stop # Stop the protector daemon
ccp status # Check if protector is running
ccp fix # Fix corrupted config file
ccp backup # Create a manual backup
ccp help # Show all commands
`$3
1. Install Node.js (if not already installed):
`bash
# macOS
brew install node
# Linux
sudo apt install nodejs npm
# Windows
# Download from https://nodejs.org
`2. Install via npm:
`bash
npm install -g claude-config-protector
`3. Set up auto-start (optional):
macOS (Launch Agent):
`bash
cp com.claude.config.protector.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.claude.config.protector.plist
`
Linux (systemd):
`bash
cp claude-protector.service ~/.config/systemd/user/
systemctl --user enable claude-protector
systemctl --user start claude-protector
`Features
$3
Prevents partial writes that cause corruption:
`javascript
// Instead of direct writes that corrupt:
fs.writeFileSync(configPath, data)// Uses atomic operations:
fs.writeFileSync(tempPath, data)
fs.renameSync(tempPath, configPath) // Atomic operation
`$3
- Creates compressed backups before any risky operation (74% size reduction)
- Maintains hourly snapshots of valid configs
- Keeps last 10 backups with automatic rotation
- Stores in ~/.claude-backups/ as gzipped files
- Typical backup size: 18KB (vs 12MB uncompressed)
- Automatic decompression during recovery$3
When corruption is detected:
1. Saves corrupted file for analysis
2. Finds latest valid backup
3. Restores automatically
4. Claude Code continues working$3
- Monitors file size continuously
- Truncates at 5MB (well below 8MB danger zone)
- Removes old history and cached data
- Preserves essential configurationHow It Works
`mermaid
graph TD
A[Monitor ~/.claude.json] --> B{Valid JSON?}
B -->|No| C[Restore from Backup]
B -->|Yes| D{Size > 5MB?}
D -->|Yes| E[Truncate Old Data]
D -->|No| F{Hour Passed?}
F -->|Yes| G[Create Backup]
F -->|No| A
C --> A
E --> A
G --> A
`Verification
Run the test suite to verify everything works:
`bash
./test.sh
`Expected output:
`
ā
Corruption Recovery
ā
Size Limit Enforcement
ā
Atomic Write Protection
ā
Backup Creation
ā
Missing File HandlingAll tests passed!
`Configuration
Edit
protector.js to customize:`javascript
const MAX_SIZE = 5 1024 1024; // Max file size (5MB default)
const MAX_BACKUPS = 10; // Number of backups to keep
const CHECK_INTERVAL = 5000; // Check frequency (5s default)
`Troubleshooting
$3
`bash
ccp status
`$3
`bash
tail -f ~/.claude-backups/protector.log
`$3
`bash
ccp fix
`$3
`bash
Stop Claude
pkill -f claudeRemove corrupted config
rm ~/.claude.jsonRestore from compressed backup (decompress first)
gunzip -c ~/.claude-backups/claude-*.json.gz > ~/.claude.jsonOr use the built-in fix command
ccp fixRestart Claude
claude
`File Structure
`
claude-config-protector/
āāā protector.js # Main protection daemon
āāā fix-config.js # One-time fixer for corrupted configs
āāā test.sh # Test suite
āāā install.sh # Automated installer
āāā com.claude.config.plist # macOS Launch Agent
āāā claude-protector.service # Linux systemd service
āāā README.md # This file
`Performance
- Memory: < 10MB
- CPU: < 0.1%
- Disk: ~180KB for backups (10 compressed files @ 18KB each)
- Compression: 74% average reduction (12MB ā 18KB per backup)
- Network: None (completely local)
Why This Works
1. Atomic Operations: POSIX-compliant rename is atomic, preventing partial writes
2. Size Limits: Keeps config well below the 8MB corruption threshold
3. Proactive Monitoring: Catches issues before Claude crashes
4. Automatic Recovery: No manual intervention needed
Contributing
Pull requests welcome! Please:
1. Test your changes with
./test.sh`MIT - Use freely, no warranty provided.
- Thanks to the Claude Code community for reporting issue #2810
- Inspired by database write-ahead logging and journaling filesystems
This is a community workaround until Anthropic implements the fix in Claude Code itself. Once the official fix is released, this tool will no longer be necessary.
---
Note: This tool is not affiliated with Anthropic. It's a community solution to help users experiencing configuration corruption issues.