← Skills

/memory-audit

Need to optimize agent context loading

install: npx skills add fortunto2/solo-factory/memory-audit
phase: meta

Audit Claude Code memory hierarchy for a project. Shows what files load at session start, total context budget, and optimization hints.

# /memory-audit

Audit Claude Code memory hierarchy for a project. Shows what files load at session start, total context budget, and optimization hints.

## Context

Claude Code loads memory files at session start in this order:
1. Managed policy (`/Library/Application Support/ClaudeCode/CLAUDE.md`)
2. User memory (`~/.claude/CLAUDE.md`)
3. User rules (`~/.claude/rules/*.md`)
4. Auto-memory (`~/.claude/projects/{key}/memory/MEMORY.md`, first 200 lines)
5. Project hierarchy (walk from `/` to CWD: `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`)
6. Local overrides (`CLAUDE.local.md` at each level)

Rules with `paths:` frontmatter are conditional — loaded only when working on matching files. Rules without `paths:` always load and consume context budget.

Target: keep startup context under 40k chars. Large CLAUDE.md files should extract domain-specific sections into conditional `.claude/rules/*.md` files.

## Steps

1. **Determine target.** Parse `$ARGUMENTS`:
   - Empty or `.` -> use CWD
   - Path -> use that path
   - `all` -> scan CWD subdirectories that have CLAUDE.md

2. **Run memory_map.py.** Execute:
   ```bash
   uv run python ${CLAUDE_PLUGIN_ROOT}/scripts/memory_map.py <path> --audit
   ```
   If `all` argument, add `--all-projects` flag instead of path.

   If `uv` is not available, fall back to:
   ```bash
   python ${CLAUDE_PLUGIN_ROOT}/scripts/memory_map.py <path> --audit --plain
   ```

3. **Analyze the output.** Read the tree display and audit hints table. Key metrics:
   - **Total startup chars** — should be under 40k
   - **Large files** (>300 lines) — candidates for splitting into rules
   - **Unconditional rules** (>30 lines, no `paths:` frontmatter) — add `paths:` to make conditional
   - **Duplicate sections** — same `## Header` in multiple files, extract to one place
   - **Missing auto-memory** — project doesn't learn across sessions

4. **Generate recommendations.** Based on audit hints, suggest concrete actions:

   | Issue | Action |
   |-------|--------|
   | File > 300 lines | Extract domain sections to `.claude/rules/{topic}.md` with `paths:` frontmatter |
   | Total > 40k chars | Identify largest files, move conditional content to rules |
   | Unconditional rule > 30 lines | Add `paths:` frontmatter targeting relevant source files |
   | Duplicate sections | Keep in the highest-level file, remove from children |
   | No auto-memory | Normal for new projects, just informational |
   | User-level rule is project-specific | Move from `~/.claude/rules/` to project's `.claude/rules/` |
   | Generic rule in project | Move up to `~/.claude/rules/` or parent CLAUDE.md |

5. **Check hierarchy health.** For the target project:
   - Verify parent CLAUDE.md files exist (inheritance chain intact)
   - Check that project CLAUDE.md has essential sections (structure, commands, stack)
   - Verify `.claude/rules/` files have valid `paths:` frontmatter syntax

6. **Output report:**
   ```
   ## Memory Audit Report

   **Project:** [path]
   **Startup context:** X files, ~Y chars (Z% of 40k budget)

   ### Tree
   [paste tree output from memory_map.py]

   ### Issues Found
   [from audit hints]

   ### Recommendations
   1. [specific action with file path]
   2. [specific action with file path]

   ### Hierarchy Health
   - Inheritance chain: [OK / broken at level X]
   - Auto-memory: [present / missing]
   - Rules: X total (Y conditional, Z always-on)
   ```

## Rules Frontmatter Reference

Conditional rules load only when the agent works on files matching the glob pattern:

```yaml
---
paths:
  - "src/lib/analytics/**"
  - "src/app/api/analytics/**"
---
# Analytics Module
...content only loaded when working on analytics files...
```

Without `paths:`, the rule always loads and consumes context budget.
Sources