From claude-ecosystem
Audits Claude Code ~/.claude/ configuration for JSON validity, structure drift vs known patterns, orphaned files, security risks, and cross-reference integrity. Read-only.
How this agent operates — its isolation, permissions, and tool access model
Agent reference
claude-ecosystem:agents/user-config-auditorhaikuSkills preloaded into this agent's context
The summary Claude sees when deciding whether to delegate to this agent
Deep health audit agent for Claude Code user configuration. Performs comprehensive checks beyond storage analysis. This agent performs the following audits: Check that all JSON configuration files parse correctly: | File | Check | |------|-------| | `~/.claude/settings.json` | Valid JSON syntax | | `~/.claude.json` | Valid JSON syntax | | `~/.claude/todos/*.json` | Valid JSON syntax | | `~/.cla...
Deep health audit agent for Claude Code user configuration. Performs comprehensive checks beyond storage analysis.
This agent performs the following audits:
Check that all JSON configuration files parse correctly:
| File | Check |
|---|---|
~/.claude/settings.json | Valid JSON syntax |
~/.claude.json | Valid JSON syntax |
~/.claude/todos/*.json | Valid JSON syntax |
~/.claude/plugins/installed_plugins.json | Valid JSON syntax |
~/.claude/plugins/known_marketplaces.json | Valid JSON syntax |
Compare actual ~/.claude/ structure against known manifest from user-config-management skill:
| Finding | Severity | Action |
|---|---|---|
| New unknown directory | INFO | May indicate Claude Code update |
| New unknown file | INFO | Investigate purpose |
| Expected directory missing | WARN | May indicate incomplete install |
| Expected file missing | WARN | May indicate corruption |
| Structure version mismatch | INFO | Update manifest after verification |
Detect orphaned files that may indicate issues:
| Check | Description |
|---|---|
| Orphaned sessions | Session files without corresponding project |
| Stale IDE locks | Lock files from processes no longer running |
| Orphaned todos | Todo files for non-existent sessions |
| Abandoned file-history | History for sessions that were cleaned up |
Check for potential security issues (without exposing sensitive data):
| Check | Risk |
|---|---|
| Credentials file permissions | Should be user-only readable (Unix) |
| API keys in settings | Should not be hardcoded in settings.json |
| MCP server credentials | Validate structure, not content |
| Sensitive files world-readable | Permission issues |
Verify references between configuration areas:
| Check | Description |
|---|---|
| Plugin references | Installed plugins exist in cache |
| Session references | Projects reference valid sessions |
| Todo references | Todos reference valid sessions |
import yaml
from pathlib import Path
# Load known structure from skill reference
skill_dir = Path("plugins/claude-ecosystem/skills/user-config-management/references")
known_structure = yaml.safe_load(open(skill_dir / "known-structure.yaml"))
claude_dir = Path.home() / ".claude"
# Get actual directories
actual_dirs = {d.name for d in claude_dir.iterdir() if d.is_dir()}
actual_files = {f.name for f in claude_dir.iterdir() if f.is_file()}
findings = []
# 1. JSON Validity
json_files = [
claude_dir / "settings.json",
Path.home() / ".claude.json",
]
json_files.extend(claude_dir.glob("todos/*.json"))
json_files.extend(claude_dir.glob("plugins/*.json"))
for json_file in json_files:
if json_file.exists():
try:
json.load(open(json_file))
except json.JSONDecodeError as e:
findings.append({
"category": "json_validity",
"severity": "ERROR",
"file": str(json_file),
"message": f"Invalid JSON: {e}"
})
# 2. Structure Drift
expected_dirs = set(known_structure.get("directories", {}).keys())
unknown_dirs = actual_dirs - expected_dirs - {"archive"} # archive is ok
missing_dirs = expected_dirs - actual_dirs
for d in unknown_dirs:
findings.append({
"category": "drift",
"severity": "INFO",
"item": d,
"message": f"Unknown directory: {d} (may be new Claude Code feature)"
})
# 3. Security checks (Unix only)
if os.name != "nt":
creds = claude_dir / ".credentials.json"
if creds.exists():
mode = os.stat(creds).st_mode
if mode & 0o077: # World or group readable
findings.append({
"category": "security",
"severity": "WARN",
"file": str(creds),
"message": "Credentials file has permissive permissions"
})
# Group by category
by_category = {}
for f in findings:
cat = f["category"]
if cat not in by_category:
by_category[cat] = []
by_category[cat].append(f)
# Count by severity
errors = sum(1 for f in findings if f["severity"] == "ERROR")
warns = sum(1 for f in findings if f["severity"] == "WARN")
infos = sum(1 for f in findings if f["severity"] == "INFO")
# Claude Code Configuration Audit
**Audit Date:** 2025-12-30 17:30 UTC
**Claude Code Version:** (if detectable)
**Manifest Version:** 1.0
## Summary
| Category | Status | Issues |
|----------|--------|--------|
| JSON Validity | ✅ Pass | 0 |
| Structure Drift | ⚠️ Warning | 2 new directories |
| Orphaned Resources | ✅ Pass | 0 |
| Security | ✅ Pass | 0 |
| Cross-References | ✅ Pass | 0 |
**Overall:** ⚠️ 2 findings (0 errors, 0 warnings, 2 info)
## Findings
### Structure Drift (2 items)
| Severity | Item | Details |
|----------|------|---------|
| INFO | `telemetry/` | Unknown directory - may be new Claude Code feature |
| INFO | `cache/` | Unknown directory - may be new Claude Code feature |
**Recommendation:** After verifying these are legitimate Claude Code additions, update the known-structure.yaml manifest.
## Checked Locations
- ~/.claude/ directory structure
- ~/.claude.json global config
- ~/.claude/settings.json user settings
- ~/.claude/plugins/*.json plugin metadata
- ~/.claude/todos/*.json todo files
## Quick Actions
- Fix JSON errors: Manual editing required
- Update drift manifest: Investigate new items, then update known-structure.yaml
- Fix permissions: `chmod 600 ~/.claude/.credentials.json`
- View storage: `/user-config:storage`
- Full reset: `/user-config:reset`
| Level | Icon | Meaning |
|---|---|---|
| ERROR | ❌ | Critical issue requiring immediate attention |
| WARN | ⚠️ | Potential issue that should be investigated |
| INFO | ℹ️ | Informational finding (drift, new items) |
| PASS | ✅ | Check passed with no issues |
This agent is invoked by:
/user-config audit action/user-config status - Quick overview/user-config storage - Storage analysis/user-config reset - Reset workflowUses user-config-management skill for:
npx claudepluginhub melodic-software/claude-code-plugins --plugin claude-ecosystemAudits global Claude Code configuration (~/.claude/) against expert knowledge: settings.json, plugins, CLAUDE.md instructions, rules. Flags missing recommendations, stale installs, quality issues.
Audits Claude Code settings.json files for schema validity, permission rules, sandbox config, env vars, and compliance. Read-only exploration mode.
Audits Claude Code markdown config files (agents, skills, rules *.md) for verbosity, duplication, cross-references, structure, freshness, and agent overlaps. Delivers prioritized file/roster improvement reports with optional fixes.