--- name: memory-hierarchy description: Complete reference for Claude Code's memory management system including all file types, locations, import syntax, and best practices. Use when planning or managing CLAUDE.md and related memory files. --- # Claude Code Memory Hierarchy Complete reference for Claude Code's memory management system. ## Memory Locations (Highest to Lowest Priority) | Memory Type | Location | Purpose | Shared With | |-------------|----------|---------|-------------| | **Enterprise policy** | macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`
Linux: `/etc/claude-code/CLAUDE.md`
Windows: `C:\Program Files\ClaudeCode\CLAUDE.md` | Organization-wide standards (IT/DevOps managed) | All org users | | **Project memory** | `./CLAUDE.md` or `./.claude/CLAUDE.md` | Team-shared project instructions | Team via git | | **Project rules** | `./.claude/rules/*.md` | Modular, topic-specific instructions | Team via git | | **User memory** | `~/.claude/CLAUDE.md` | Personal preferences for all projects | Just you | | **User rules** | `~/.claude/rules/*.md` | Personal modular rules | Just you | | **Project local** | `./CLAUDE.local.md` | Personal project-specific preferences | Just you (gitignored) | **Key:** Files higher in hierarchy load first; more specific memories take precedence. ## Memory Discovery Claude Code discovers memory files by: 1. **Upward recursion**: From `cwd` up to (not including) root `/` 2. **Subtree discovery**: Nested CLAUDE.md loaded when reading files in those subtrees 3. **Automatic loading**: All `.claude/rules/*.md` files loaded with same priority as `.claude/CLAUDE.md` **View loaded memories:** Run `/memory` command ## Import Syntax CLAUDE.md files can import other files using `@path/to/file`: ```markdown # Project Instructions See @README.md for project overview. See @docs/architecture.md for system design. API reference: @docs/api/README.md # Personal preferences (not in git) @~/.claude/my-project-prefs.md ``` **Features:** - Relative and absolute paths supported - Home directory imports (`@~/...`) for personal preferences - Not evaluated inside code blocks or code spans - Recursive imports (max 5 hops) ## Modular Rules (`.claude/rules/`) ### Basic Structure ``` project/ ├── .claude/ │ ├── CLAUDE.md # Main project instructions │ └── rules/ │ ├── code-style.md # Code style guidelines │ ├── testing.md # Testing conventions │ ├── security.md # Security requirements │ └── api/ │ └── validation.md # API-specific rules ``` ### Path-Specific Rules Use YAML frontmatter to scope rules to specific files: ```markdown --- paths: src/api/**/*.ts --- # API Development Rules - All endpoints must include input validation - Use the standard error response format ``` ### Glob Patterns | Pattern | Matches | |---------|---------| | `**/*.ts` | All TypeScript files | | `src/**/*` | All files under src/ | | `*.md` | Markdown files in root | | `src/**/*.{ts,tsx}` | TS and TSX in src/ | | `{src,lib}/**/*.ts` | TS in src/ or lib/ | | `tests/**/*.test.ts` | Test files | **Multiple patterns:** ```yaml --- paths: {src,lib}/**/*.ts, tests/**/*.test.ts --- ``` ### Subdirectory Organization ``` .claude/rules/ ├── frontend/ │ ├── react.md │ └── styles.md ├── backend/ │ ├── api.md │ └── database.md └── general.md ``` All `.md` files discovered recursively. ### Symlink Support Share rules across projects: ```bash ln -s ~/shared-claude-rules .claude/rules/shared ln -s ~/company-standards/security.md .claude/rules/security.md ``` ## User-Level Configuration ### User Memory (`~/.claude/CLAUDE.md`) Personal preferences applying to ALL projects: - Code style preferences - Tooling shortcuts - Workflow habits ### User Rules (`~/.claude/rules/`) ``` ~/.claude/rules/ ├── preferences.md # Personal coding preferences └── workflows.md # Preferred workflows ``` User rules load before project rules; project rules take higher priority. ## Quick Memory Addition ### `#` Shortcut Start input with `#`: ``` # Always use descriptive variable names ``` Prompts for which memory file to store in. ### `/memory` Command Opens memory file in system editor for extensive additions. ### `/init` Command Bootstrap a CLAUDE.md for your codebase. ## When to Use Each Memory Type | Scenario | Recommended Location | |----------|---------------------| | Team coding standards | `./CLAUDE.md` | | Build/test/lint commands | `./CLAUDE.md` | | Topic-specific rules (testing, API, security) | `./.claude/rules/{topic}.md` | | File-type-specific patterns | `./.claude/rules/` with `paths:` | | Personal code style | `~/.claude/CLAUDE.md` | | Your local dev URLs/setup | `./CLAUDE.local.md` | | Org-wide compliance | Enterprise policy (IT managed) | ## Decision Tree: Choosing Memory Structure ``` Project Analysis │ ├─ Small project (<500 files, <50 dirs)? │ └─ Single ./CLAUDE.md │ └─ Use @imports for large documentation │ ├─ Medium project with topic diversity? │ └─ ./CLAUDE.md + .claude/rules/ │ ├─ testing.md │ ├─ code-style.md │ └─ {topic}.md │ ├─ Monorepo / microservices? │ └─ Multiple ./CLAUDE.md (one per package/service) │ └─ Each can have own .claude/rules/ │ ├─ File-type-specific patterns? │ └─ Path-specific rules with paths: frontmatter │ └─ Personal dev setup needed? └─ ./CLAUDE.local.md (gitignored automatically) ``` ## Best Practices ### Content Guidelines - **Be specific**: "Use 2-space indentation" > "Format code properly" - **Use structure**: Bullet points under descriptive headings - **Review periodically**: Update as project evolves ### Rules Organization - **Keep rules focused**: Each file covers one topic - **Use descriptive filenames**: `testing.md`, `api-design.md`, `security.md` - **Use paths: sparingly**: Only when rules truly apply to specific file types - **Organize with subdirectories**: Group related rules ### Project vs Personal - **Project memory**: What the team needs to know - **User memory**: Your personal preferences - **Local memory**: Your dev environment specifics ## File Priority Summary When the same topic is covered in multiple files: 1. Enterprise policy (highest) 2. Project `.claude/rules/` (path-specific first) 3. Project `CLAUDE.md` 4. User `~/.claude/rules/` 5. User `~/.claude/CLAUDE.md` 6. Project `CLAUDE.local.md` (lowest, but most specific to you) ## Common Patterns ### Imports for Documentation ```markdown # Project Overview See @README.md for getting started. Architecture details: @docs/architecture.md API reference: @docs/api/README.md ``` ### Topic-Specific Rules ``` .claude/rules/ ├── testing.md # Test patterns, mocking, coverage ├── api-design.md # REST conventions, error handling ├── database.md # Query patterns, migrations └── security.md # Auth, validation, secrets ``` ### Path-Specific API Rules ```markdown --- paths: src/api/**/*.ts, src/routes/**/*.ts --- # API Endpoint Rules - Validate all inputs with zod - Use consistent error response format - Include OpenAPI documentation comments ``` ### Personal Local Setup `./CLAUDE.local.md`: ```markdown # My Local Setup ## Dev URLs - API: http://localhost:3001 - Frontend: http://localhost:3000 - Database: postgresql://localhost:5432/mydb ## Debug Commands ```bash DEBUG=api:* npm run dev ``` ```