Skip to content

Claude Code Memory System — Usage Guide

Let Claude Code remember who you are, what you prefer, and what's happening in your project across sessions.

Memory System · Four Memory Types · Trigger Saving · Storage Location · Manage Memories · Lifecycle · Quick Reference

Memory System Overview


1. What Is the Memory System?

Claude Code's memory system is a file-based persistent knowledge store that allows Claude to continuously build understanding of you and your project across multiple conversations.

Core principle: Only remember things that cannot be inferred from the code itself.

RememberedNot Remembered
You're a data scientist focused on logging systemsCode architecture, file structure
"Don't mock the database"Git history, who changed what
Non-critical merges frozen after ThursdayExisting CLAUDE.md content
Bug tracking is in Linear's INGEST projectDebugging solutions (fixes are already in the code)

2. Four Memory Types

Four Memory Types

Claude Code strictly categorizes memories into four types:

2.1 User (User Profile)

Records your role, goals, skill level, and preferences to help Claude tailor its collaboration approach.

User says: I've written Go for ten years, but this is my first time touching the React part of this repo
Claude saves: Deep Go experience, React newcomer — explain frontend concepts using backend analogies

2.2 Feedback (Behavioral Feedback)

Your corrections or affirmations about how Claude works. These memories prevent Claude from repeating the same mistakes.

User says: Don't summarize what you did at the end of your reply, I can see the diff
Claude saves: User prefers concise replies, no trailing summaries

Important: Not only corrections are recorded -- affirmations are too. If Claude makes a non-obvious choice and you approve, that gets remembered as well.

2.3 Project (Project Context)

Project context that cannot be derived from the code or Git history: who's doing what, why, and deadlines.

User says: We're freezing all non-critical merges after Thursday, the mobile team needs to cut a release branch
Claude saves: Merge freeze starting 2026-03-05, flag non-critical PR work after this date

Note: Claude converts relative dates ("Thursday") to absolute dates ("2026-03-05") to ensure memories don't become ambiguous over time.

2.4 Reference (External References)

Pointers to information in external systems: dashboards, issue trackers, Slack channels.

User says: On-call monitors the grafana.internal/d/api-latency dashboard
Claude saves: grafana.internal/d/api-latency is the on-call latency dashboard — check when editing request path code

3. How to Trigger Memory Saving

Memory Trigger Flow

Method 1: Automatic Extraction (Most Common)

This is the primary method. You don't need to do anything -- Claude automatically analyzes conversation content at the end of each conversation turn and extracts information worth remembering.

Workflow:

  1. You have a normal conversation with Claude
  2. Claude finishes its response (no tool calls pending)
  3. A memory extraction sub-agent starts in the background
  4. The sub-agent analyzes the recent conversation content
  5. It identifies memories worth saving
  6. Writes memory files + updates the MEMORY.md index

The terminal will display a notification:

Memory updated in ~/.claude/projects/.../memory/feedback_testing.md · /memory to edit

Method 2: Explicit Request

Directly tell Claude to "remember this":

User: Remember, this project must run bun test before deploying
Claude: [Immediately saves as a feedback-type memory]

Method 3: /memory Command

Type /memory in the terminal to open a file picker that lets you edit memory files directly in your editor.

> /memory

This lists all editable memory files (CLAUDE.md, CLAUDE.local.md, auto-memory, etc.) and opens the selected file with your $EDITOR or $VISUAL.

Method 4: /remember Command

Type /remember to trigger the memory review skill, which will:

  • Review all automatic memory entries
  • Propose promoting suitable entries to CLAUDE.md or CLAUDE.local.md
  • Detect duplicate, outdated, and conflicting memories
  • Does not modify anything directly -- all changes require your approval

4. Where Are Memories Stored?

Directory Structure

~/.claude/
└── projects/
    └── {project-path-hash}/
        └── memory/                    <- Auto-memory directory
            ├── MEMORY.md              <- Index file (always loaded into context)
            ├── user_role.md           <- User profile memory
            ├── feedback_testing.md    <- Behavioral feedback memory
            ├── project_freeze.md      <- Project context memory
            ├── reference_linear.md    <- External reference memory
            └── team/                  <- Team shared memory (if enabled)
                ├── MEMORY.md
                └── ...

Memory File Format

Each memory file uses YAML frontmatter + Markdown content:

markdown
---
name: Testing strategy preference
description: Integration tests must use a real database, no mocking
type: feedback
---

Integration tests must use a real database, no mocking.

**Why:** Last quarter, mocked tests passed but production migrations failed — mock/production divergence masked the issues.

**How to apply:** When writing or reviewing tests, ensure database operations use real connections.

MEMORY.md Index File

MEMORY.md is an index, not content. It is always loaded into context, with one entry per line:

markdown
- [User role](user_role.md) — Data scientist, focused on observability/logging
- [Testing strategy](feedback_testing.md) — Integration tests use real DB, no mocking
- [Merge freeze](project_freeze.md) — Non-critical merges frozen starting 2026-03-05
- [Bug tracking](reference_linear.md) — Pipeline bugs tracked in Linear INGEST project

Limit: Maximum 200 lines or 25KB; content beyond this is truncated.


5. How to Manage Memories

Ask Claude to Forget

User: Forget the memory about the merge freeze
Claude: [Finds and deletes the relevant memory file and index entry]

Ask Claude to Ignore Memories

User: Ignore memories, start from scratch
Claude: [Does not use any memory content in this conversation]

Manual Editing

Directly edit files under ~/.claude/projects/{hash}/memory/, or use the /memory command.

Disable Automatic Memory

MethodHow
Environment variableCLAUDE_CODE_DISABLE_AUTO_MEMORY=1
Settings fileSet "autoMemoryEnabled": false in settings.json
Bare modeStart with --bare / CLAUDE_CODE_SIMPLE=1

Custom Memory Directory

Set in ~/.claude/settings.json:

json
{
  "autoMemoryDirectory": "~/my-claude-memories"
}

Supports ~/ expansion. For security reasons, the project-level .claude/settings.json is not allowed to set this option.


6. Memory Lifecycle

Memory Lifecycle

New information learned during conversation
      |
 Auto-extraction / Explicit save
      |
  Write memory file + index
      |
 Next conversation loads MEMORY.md
      |
  Intelligent selection of relevant memories (Sonnet)
      |
   Inject into conversation context
      |
  Memory getting old? Verify before using
      |
  Outdated? Update or delete
      |
 (After 24h + 5 sessions)
      |
  AutoDream consolidates memories in background

AutoDream -- "Dreaming" to Organize Memories

Claude Code has a hidden AutoDream feature, analogous to how the human brain organizes memories during sleep. When the following conditions are met, Claude silently launches a "dreaming" sub-agent in the background:

  • At least >= 24 hours since the last consolidation
  • At least >= 5 sessions accumulated in the interim

The dreaming process has four phases: Orient -> Gather -> Consolidate -> Prune. The bottom status bar shows "dreaming", and you can press Shift+Down to view progress or x to terminate.

For a detailed technical analysis, see AutoDream Memory Consolidation.

Freshness Management

  • Today's/yesterday's memories: Used directly
  • Memories older than 1 day: Accompanied by a stale warning, reminding Claude to verify before citing
  • Memories referencing file paths/function names: Confirmed via grep before use to ensure they still exist

7. Quick Reference

ActionMethod
Ask Claude to remember"Remember: this project uses bun, not npm"
Ask Claude to forget"Forget the memory about XXX"
Edit memories/memory command
Review and organize/remember command
Ignore memories"Ignore memories" / "Don't use memories"
Disable auto-memoryCLAUDE_CODE_DISABLE_AUTO_MEMORY=1
Disable AutoDreamSet "autoDreamEnabled": false in settings.json
Manually consolidate memories/dream command
View memory directory~/.claude/projects/{hash}/memory/

Released under the MIT License.