Claude ignores CLAUDE.md instruction to read memory files at conversation start
Problem
When CLAUDE.md explicitly instructs Claude to read memory files at conversation start, Claude consistently skips this step and begins executing tasks directly — even when the missing context causes failures (wrong API keys, wrong ports, missing workflow IDs).
Root Cause (RCA)
The system automatically injects an auto-memory context (projects/<path>/memory/MEMORY.md) into the conversation. Claude incorrectly treats this injected content as sufficient context, causing it to ignore the explicit "read at conversation start" instruction defined in CLAUDE.md.
CLAUDE.md in this case defines a two-level memory system:
- Level 1 (global):
~/.claude/MEMORY.md+~/.claude/memories/ - Level 2 (project):
<cwd>/.claude/MEMORY.md+<cwd>/.claude/memory/
The injected path (~/.claude/projects/<hash>/memory/) is a third, different path that CLAUDE.md explicitly says to ignore.
Concrete Impact
In a real session:
- Correct API key was documented in
<cwd>/.claude/memory/project_incident_pipeline_status.md - Claude instead searched for the key via SSH on the target system, found an outdated key, received 401 Unauthorized, and spent several minutes debugging
- Only after user intervention did Claude read the memory files and immediately find the correct key
Expected Behavior
At the start of every conversation, Claude must unconditionally execute the following before any task-related tool calls:
- Read
~/.claude/MEMORY.md - Read
<cwd>/.claude/MEMORY.md(if it exists)
This must happen regardless of what context is already injected by the system.
Actual Behavior
Claude skips the memory reads, jumps directly into task execution, and uses trial-and-error to find information that is already documented.
Environment
- Claude Code CLI
- Model:
claude-sonnet-4-6 - OS: Linux (Proxmox LXC)
Suggested Fix
The model should treat CLAUDE.md instructions for "read at conversation start" with higher priority than the implicit assumption that injected context is sufficient. Ideally, the CLI should enforce a hook that reads user-defined memory paths before the first assistant turn.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗