Environment maintenance tool for Claude Code (~/.claude/).
Diagnoses MCP server health, finds sync debris, analyzes tool usage from session logs, and produces a health score with prioritized recommendations.
# With uv (recommended)
uv tool install claude-maintain
# With pip
pip install claude-maintain
# Development (editable)
git clone https://github.com/HermeticOrmus/claude-maintain.git
cd claude-maintain
uv tool install -e .Parses both Claude Code CLI (~/.claude/mcp.json) and Claude Desktop (claude_desktop_config.json) configs. Detects:
- Placeholder API keys (
YOUR_OPENAI_API_KEY_HERE) - Cross-platform path issues (Linux paths on Windows, synced via Syncthing/rsync)
- Duplicate services (e.g., 4 Telegram variants)
- Missing required environment variables
maintain health # Show health report
maintain health --generate-clean # Save fixed configs to ~/.claude/reports/Finds accumulated debris in ~/.claude/:
- Syncthing conflict files (
*.sync-conflict-*) - Orphaned files (
.backup,.broken,.old) - Stale session logs (configurable age threshold)
- Skill naming inconsistencies (
SKILL.mdvsskill.md) - Directory size breakdown
maintain clean # Dry run (shows what would be cleaned)
maintain clean --execute # Move debris to ~/.claude/backups/ (safe, reversible)
maintain clean --max-age 60 # Flag sessions older than 60 daysStream-parses session JSONL files to extract tool usage patterns:
- Per-tool invocation counts (Read, Bash, Write, MCP tools, etc.)
- Skill usage tracking (which
/skillsare actually used) - Cross-reference with filesystem (find never-invoked skills)
- Results cached for fast repeat runs
maintain stats # Full scan (all sessions, cached)
maintain stats --recent 20 # Only 20 most recent sessions
maintain stats --no-cache # Force fresh parseRuns all three modules and synthesizes a weighted health score (0-100):
| Category | Weight |
|---|---|
| MCP Health | 25 |
| Storage | 20 |
| Skills | 20 |
| Plugins | 15 |
| Sync Cleanliness | 10 |
| Naming Consistency | 10 |
Produces prioritized recommendations (CRITICAL / HIGH / MEDIUM / LOW) and saves a markdown report to ~/.claude/reports/.
maintain optimize # Full analysis + scoreAll commands support --json for machine-readable output:
maintain --json health # JSON health report
maintain --json stats # JSON usage data
maintain --json optimize # JSON score + recommendations- Dry run by default --
maintain cleanshows what it would do without acting - Backups before deletion --
--executemoves files to~/.claude/backups/maintain-{timestamp}/ - Never overwrites configs --
--generate-cleanwrites fixed versions to~/.claude/reports/ - Never logs secrets -- API tokens are flagged as a security concern but never displayed in reports
Anyone who:
- Uses Claude Code across multiple machines (Syncthing, rsync, cloud sync)
- Has accumulated MCP servers they've experimented with
- Wants to know which of their 100+ skills are actually used
- Has never cleaned
~/.claude/and suspects it's grown large
- Python 3.10+
- Claude Code installed (
~/.claude/directory exists)
MIT