10 KiB
Memory Troubleshooting Guide
Detailed problem-solution reference for CLAUDE.md issues.
Problem 1: Memory File Not Loading
Symptoms: Claude doesn't seem to remember project context, no awareness of CLAUDE.md contents.
Diagnosis
# Check if file exists
ls -la CLAUDE.md
ls -la .claude/CLAUDE.md
ls -la ~/.claude/CLAUDE.md
# Check file permissions
ls -l CLAUDE.md
# Check current directory
pwd
Common Causes & Solutions
Cause 1: Wrong Location
# ❌ Bad: Random location
/some/random/path/CLAUDE.md
# ✓ Good: Project root
./CLAUDE.md
# or
./.claude/CLAUDE.md
Solution: Move file to project root or .claude/ directory.
Cause 2: Wrong Filename (Case-Sensitive!)
# ❌ Bad
claude.md
Claude.md
CLAUDE.MD
README.md
# ✓ Good
CLAUDE.md
Solution: Rename to exactly CLAUDE.md (all caps).
Cause 3: Syntax Errors in Imports
# ❌ Bad: Broken import
@docs/nonexistent.md
# ✓ Good: Valid path
@docs/architecture.md
Solution: Verify all imported paths exist and are correct.
Cause 4: File Permissions
# Check permissions
ls -l CLAUDE.md
# If not readable, fix it
chmod 644 CLAUDE.md
Verification Test
Add a temporary marker to CLAUDE.md:
**MEMORY LOADED: This is a test marker**
Ask Claude: "What's the first line of your memory?" If Claude sees the marker, memory is loading correctly. Remove marker after test.
Problem 2: Bloated Memory (Token Waste)
Symptoms: Context fills up quickly, slow responses, high costs, frequent compaction.
Diagnosis
# Check file size
wc -l CLAUDE.md
# Goal: 100-200 lines max
# Count characters (rough token estimate: chars ÷ 4)
wc -c CLAUDE.md
# Goal: < 20KB
Solution: Trim and Split
Before (Bloated - 500 lines)
# Project Overview
This project is a comprehensive e-commerce platform built with React, Node.js,
Express, PostgreSQL, Redis, and Docker. The frontend uses React 18 with TypeScript
in strict mode, Tailwind CSS for styling, React Router for navigation, Redux Toolkit
for state management, and Axios for API calls. The backend uses Express.js with
TypeScript, Sequelize ORM for database access, JWT for authentication, bcrypt for
password hashing, and Redis for session management...
[400 more lines of verbose content]
After (Lean - 150 lines)
# Tech Stack
- Frontend: React 18 + TypeScript + Tailwind
- Backend: Express + PostgreSQL + Redis
- Architecture: Microservices
- Details: @docs/tech-stack.md
## Common Commands
```bash
npm run dev # Local development
npm test # Run all tests
npm run build # Production build
Key Conventions
- 2-space indentation
- Functional components only
- ESLint + Prettier
- 80% test coverage minimum
IMPORTANT Rules
- YOU MUST run tests before committing
- Never commit .env files
- Always update API docs when adding endpoints
**Result**: 70% token reduction
### Compression Techniques
1. **Use Bullet Points, Not Paragraphs**
2. **Use Imports for Details**
3. **Show Commands, Not Explanations**
4. **Prefer Tables Over Text**
---
## Problem 3: Claude Not Following Instructions
**Symptoms**: Claude ignores rules in CLAUDE.md, doesn't follow conventions.
### Diagnosis
Check instruction specificity:
```markdown
# ❌ Too Vague (ignored)
- Write clean code
- Follow best practices
- Be careful with security
# ✓ Specific (followed)
- Use 2-space indentation (not tabs)
- All API endpoints must have rate limiting
- Hash passwords with bcrypt (min 10 rounds)
Solution: Add Emphasis
Weak Instruction (Often Ignored)
Use functional components in React.
Run tests before committing.
Strong Instruction (Followed)
IMPORTANT: ALL React components MUST be functional (no class components).
YOU MUST run `npm test` and ensure all tests pass before any git commit.
Emphasis Hierarchy
ALL CAPS- Maximum attentionIMPORTANT:- Critical rulesYOU MUST- Mandatory actionsNEVER- Forbidden actions- Bold - Standard emphasis
- Regular text - General info
Example: Strong Rules Section
## IMPORTANT Project Rules
YOU MUST:
- Run full test suite before every commit
- Get 2 PR approvals before merging
- Update API documentation when adding endpoints
NEVER:
- Commit directly to main branch
- Merge code with failing tests
- Hardcode API keys or secrets
ALWAYS:
- Use environment variables for config
- Include error handling in all async functions
- Write tests for new features
Problem 4: Memory Updates Not Reflected
Symptoms: Changes to CLAUDE.md don't take effect in current session.
Solutions
Method 1: Quick Add (# Shortcut)
# At input prompt, press # first
# Type: Use snake_case for Python functions
# Claude auto-adds to appropriate CLAUDE.md
Best For: Quick single-line updates
Method 2: /memory Command
/memory
# Opens memory management interface
Best For: Reviewing and editing existing memory
Method 3: Direct Edit + Reload
# Edit the file
vim CLAUDE.md
# Then explicitly ask Claude
"Please re-read CLAUDE.md"
Best For: Major updates or reorganization
Method 4: Session Restart (Most Reliable)
# Close and reopen Claude Code
# Or Ctrl+C to exit CLI
Best For: When other methods don't work
Problem 5: Too Many Memory Files
Symptoms: Conflicting instructions, unclear hierarchy, unexpected behavior.
Diagnosis
# Find all CLAUDE.md files
find . -name "CLAUDE.md"
find ~ -name "CLAUDE.md"
# Check which directory you're in
pwd
Understanding Priority
Higher priority wins on conflicts:
1. ~/.claude/enterprise/CLAUDE.md # Organization policy (highest)
↓
2. ./CLAUDE.md # Current project
↓
3. ~/.claude/CLAUDE.md # Your personal defaults
↓
4. ./subfolder/CLAUDE.md # Subfolder overrides
Solution: Organize Properly
Global Personal (~/.claude/CLAUDE.md)
# Personal Defaults
## Communication Style
- Explain decisions before acting
- Ask before destructive operations
## Code Preferences
- Prefer functional programming
- Avoid premature optimization
Use For: Universal personal preferences
Project Root (./CLAUDE.md)
# MyProject
@docs/tech-stack.md
@docs/conventions.md
IMPORTANT: This project uses OOP (override personal FP preference).
Tech Stack: Java + Spring Boot
Use For: Project-specific standards (overrides personal)
Subfolder (./frontend/CLAUDE.md)
# Frontend Context
- React 18 + TypeScript
- Component structure: Atomic Design
- See @../docs/ui-patterns.md
Use For: Directory-specific context (loaded when in that directory)
Problem 6: Import Loops or Errors
Symptoms: "Import depth exceeded", circular import error, or infinite loading.
Import Rules
# ❌ Bad: Too Deep
CLAUDE.md
→ @docs/a.md (depth 1)
→ @docs/b.md (depth 2)
→ @docs/c.md (depth 3)
→ @docs/d.md (depth 4)
→ @docs/e.md (depth 5)
→ @docs/f.md (depth 6 - FAILS!)
# ✓ Good: Flat Structure
CLAUDE.md
→ @docs/architecture.md
→ @docs/conventions.md
→ @docs/testing.md
→ @docs/deployment.md
# ❌ Bad: Circular Import
CLAUDE.md → @docs/a.md → @docs/b.md → @docs/a.md (LOOP!)
# ✓ Good: No Circles
CLAUDE.md → @docs/a.md → @docs/c.md
→ @docs/b.md → @docs/c.md
Solution: Restructure Imports
Before (Deep Chain):
# CLAUDE.md
@docs/main.md
# docs/main.md
@project/overview.md
# project/overview.md
@details/architecture.md
# details/architecture.md
[content]
After (Flat):
# CLAUDE.md
@docs/overview.md
@docs/architecture.md
@docs/conventions.md
Best Practices
- Max depth: 5 levels
- No circular references
- Prefer flat over deep
- Use relative paths for project files:
@docs/file.md - Use absolute paths for global files:
@~/.claude/shared.md
Problem 7: Conflicting Team Instructions
Symptoms: Different team members get different behavior from Claude.
Diagnosis
# Check for local overrides
ls .claude/CLAUDE.local.md
ls .claude/settings.local.json
# Check git-tracked files
git ls-files | grep -i claude
Solution: Proper Separation
Team-Shared (.claude/CLAUDE.md - in git)
# Team Standards
IMPORTANT: All team members follow these conventions.
## Git Workflow
1. Branch from `develop`
2. PR requires 2 approvals
3. Squash merge
## Coding Standards
@docs/style-guide.md
## NEVER
- Commit directly to main
- Merge without tests
Personal (.claude/CLAUDE.local.md - gitignored)
# My Personal Preferences
[Individual customizations that don't affect team]
.gitignore Setup
# Personal files (not shared)
.claude/CLAUDE.local.md
.claude/settings.local.json
Quick Reference: Diagnostic Checklist
When memory isn't working, check:
- [ ] File named exactly "CLAUDE.md" (case-sensitive)
- [ ] File in project root or .claude/ directory
- [ ] File has read permissions (chmod 644)
- [ ] Valid markdown syntax
- [ ] Imports use correct paths
- [ ] No circular import loops
- [ ] Import depth ≤ 5 levels
- [ ] File size < 20KB (~200 lines)
- [ ] Instructions are specific, not vague
- [ ] Used emphasis for critical rules
- [ ] No syntax errors in code blocks
- [ ] Tried session restart
- [ ] Verified loading with test marker
Getting Help
If problems persist:
- Verify File Loading: Add test marker, ask Claude to read it
- Check Hierarchy: Understand which files are being loaded
- Review Syntax: Ensure valid markdown and imports
- Simplify First: Start with minimal CLAUDE.md, add back gradually
- Restart Session: Most reliable way to reload changes
For further assistance, see Official Documentation.