User-scope ~/.claude/CLAUDE.local.md loads its content but silently never expands @imports
Summary
At user scope, ~/.claude/CLAUDE.local.md has its content loaded into context, but @import lines inside it are never expanded — the literal @path/to/file.md text is what reaches the model.
The failure is silent. Nothing errors, nothing warns, and the file is loaded, so from the outside it looks like it worked. The only symptom is that the imported content is quietly missing from context, which surfaces much later as the assistant not knowing something it was configured to know.
Expected
Either imports expand as they do in a project-scope CLAUDE.md, or the unexpanded import produces a visible warning.
Measured behaviour
Established with real claude -p probe sessions on 2026-09-01, one probe per cell:
| File | @~/… tilde | absolute | relative |
|---|---|---|---|
| project CLAUDE.md | expands | expands | expands |
| project CLAUDE.local.md | expands | — | — |
| project .claude/rules/*.md | literal | literal | expands |
| user ~/.claude/rules/*.md | — | — | expands |
| user ~/.claude/CLAUDE.local.md | literal | literal | — |
Two things worth separating:
~/.claude/CLAUDE.local.mdis not a documented user-scope location in the memory docs — documented user-scope homes are~/.claude/CLAUDE.mdand~/.claude/rules/. But its content does load on this build, which is what makes the silent import failure misleading: the file is clearly being read, so a reasonable person concludes the imports were read too..claude/rules/*.mdaccepts only the relative form. Tilde and absolute stay literal there. That is also undocumented as far as I can find.
Reproduction
mkdir -p ~/.claude/probe
echo 'MARKER-STRING-XYZ' > ~/.claude/probe/imported.md
printf 'local file loaded\n\n@~/.claude/probe/imported.md\n' >> ~/.claude/CLAUDE.local.md
claude -p 'Reply with any marker strings you can see in your context, verbatim.'
Observed: the model reports the literal text of the import path, not MARKER-STRING-XYZ.
Re-verified 2026-09-28 on 2.1.282 in an isolated config dir (CLAUDE_CONFIG_DIR pointed at a
throwaway directory, so nothing real was touched). A CLAUDE.local.md there carried an absolute@…/imported-local.md; its marker was absent from the response while a control marker imported
from a normal rules/*.md file in the same run was present. So the two paths differ on the same
build, in the same process.
The positive control still works on today's build — ~/.claude/rules/*.md with a relative @../framework/file.md expands correctly, confirmed in a live session today.
Why it matters
This shape is common for anyone keeping their Claude config in a dotfiles repo: a small user-scope file that imports shared, version-controlled instruction files. The import silently not expanding means the shared instructions are absent while every surface says the configuration loaded.
Environment
macOS 25.6.0 (arm64). Matrix measured 2026-09-01; positive control re-confirmed 2026-09-28 on 2.1.282 (Claude Code).